2012-07-24 55 views
2

弹簧参考手册说:弹簧单体范围

Spring单例的范围最好描述为“每个容器和每个bean”。

考虑这个代码片段:

ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml") 
MyBean myobj=(MyBean)context.getBean("myBean"); //myBean is of singleton scope. 
MyBean myobj1=(MyBean)context.getBean("myBean"); 

per container意味着,如果我们这样做context.getBean("myBean");两次将返回即同一Bean myobj==myobj1true

但是从上面的陈述中得出的per container and per bean中的per bean是什么意思?

回答

0

我问另外一个问题中提到这一之一:spring singleton scope— per container per bean

从我得出的结论以下词组per container per beanper bean部分:

考虑:

ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml") 
MyBean myobj=(MyBean)context.getBean("myBean"); 
MyBean myobj1=(MyBean)context.getBean("myBean"); 
MyBean myobj2=(MyBean)context.getBean("mySecondBean"); 

的beans.xml:

<bean id="myBean" class="MyBean"/> 
<bean id="mySecondBean" class="MyBean"/> 

现在辛格尔顿春天是per container per bean

per container意味着,如果我们中同一容器得到同一个bean ID通过getBean()那么它们代表同一instances.Therefore myobj==myobj1是真实的。

如果我们两个不同的容器中获得具有相同ID豆那么他们将代表两个不同的instances.This通过上面给出Nirmal-想超越在回答表示。

但是对于单身人士,在per container之内,它也应该是per bean(每个bean标签)。

即如果我们定义在同一类的配置文件两个bean,然后他们代表不同的实例即使在同一容器

这就是为什么myobj==myobj2是错误的。

3

Spring bean容器将创建一个bean为单范围的Bean,如果你有春天的不同豆将获得创建

所以每个集装箱会有bean的单个实例的另一个容器(用于单作用域bean)

+0

我已经描述过'每个容器和每个bean'每个容器'部分的短语,即单身bean仍然是每个容器的单身。但是'per bean'在短语'per container and per bean'中表示了什么?或者我只是用短语的语言来混淆。 – 2012-07-25 07:06:59

+0

如果您配置了2个相同类的bean,那么容器中将有2个该类的实例,因为定义了两个bean – 2012-07-25 07:08:29

4

以简单的方式

ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml") 
MyBean myobj=(MyBean)context.getBean("myBean"); //myBean is of singleton scope. 

ApplicationContext context1= new ClassPathXmlApplicationContext("Beans.xml") 
MyBean myobj1=(MyBean)context1.getBean("myBean"); 

myobj==myobj1 would not be same 
+0

“myobj == myobj1将不会相同”是什么意思?两者都是相同的对象,所以它们是'=='。 – 2012-07-25 07:06:17

+0

@ Tichodroma:实际上他的意思是myobj == myobj1是假的。 – 2012-07-25 07:09:50

+0

@Tichodroma:是的,myobj == myobj1是false意味着myobj和myobj1不是同一个bean – 2012-07-25 09:48:52