2016-09-22 3 views
1

Singleton bean scope в XML spring не работает. Один прототип работает. Даже без прототипа тега области работает.bean scope in xml не работает

XML фрагмент:

<?xml version="1.0" encoding="UTF-8"?> 

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

    <bean id="restaurant" class="bean_scope.Restaurant1" scope="singleton">   <!-- scope="singleton" --> 
    </bean> 

</beans> 

Java-класс для сеттеров:

package bean_scope; 

public class Restaurant1 { 

    private String welcomeNote; 

    public void setWelcomeNote(String welcomeNote) { 
     this.welcomeNote = welcomeNote; 
    } 

    public void greetCustomer(){ 
     System.out.println(welcomeNote); 
    } 
} 

Java Spring испытаний Класс:

package bean_scope; 

import org.springframework.context.support.ClassPathXmlApplicationContext; 

public class Restaurant1Test { 

    public static void main(String[] args) { 

     Restaurant1 restaurantOb1=(Restaurant1) new ClassPathXmlApplicationContext("bean_scope/SpringConfig1.xml") 
      .getBean("restaurant"); 
     restaurantOb1.setWelcomeNote("Welcome"); 
     restaurantOb1.greetCustomer(); 

     Restaurant1 restaurantOb2=(Restaurant1) new ClassPathXmlApplicationContext("bean_scope/SpringConfig1.xml") 
      .getBean("restaurant"); 
     //restaurantOb2.setWelcomeNote("Hello"); 
     restaurantOb2.greetCustomer(); 
    } 

} 

Выход:

Welcome 
null 

Пожалуйста, помогите мне в этом, почему Singleton scope не работает

+1

Я не вижу здесь никакой проблемы. вы создаете два контекста приложения, и поэтому будут созданы два ресторана. –

ответ

0

Поскольку вы создаете два независимых экземпляра ClassPathXmlApplicationContext, каждый из них будет иметь свой собственный экземпляр одного экземпляра компонента. Область singleton означает, что в контексте Spring есть только один экземпляр компонента - но у вас есть два контекста.

Это произведет результат вы ожидаете:

ApplicationContext ctx = new ClassPathXmlApplicationContext("bean_scope/SpringConfig1.xml"); 

Restaurant1 restaurantOb1=(Restaurant1) ctx.getBean("restaurant"); 
restaurantOb1.setWelcomeNote("Welcome"); 
restaurantOb1.greetCustomer(); 

Restaurant1 restaurantOb2=(Restaurant1) ctx.getBean("restaurant"); 
//restaurantOb2.setWelcomeNote("Hello"); 
restaurantOb2.greetCustomer(); 
Смежные вопросы