Spring bean范围:singleton和Prototype

时间:2016-09-30 20:41:27

标签: spring

案例1:假设我们在原型bean中注入单例bean,那么如果我们调用prototype bean,将会创建多少个实例。

考虑一下情景: -

<bean id="a" class="A" scope="prototype">
 <property name="b" ref="b">
</bean>

<bean id="b" class="B">

案例2:假设我们在singleton bean中注入Prototype bean,那么如果我们调用singleton bean,将会创建多少个实例。

考虑一下情景: -

<bean id="a" class="A" >
  <property name="b" ref="b">
</bean>

<bean id="b" class="B" scope="prototype">

2 个答案:

答案 0 :(得分:1)

我正在回答你问题的一部分。

案例2:具有原型bean依赖关系的单例bean

使用这种配置,预计当你从应用程序上下文中获取A时,它将与新B连接,因为我们声明B bean是原型范围。但不会发生

当应用程序上下文获得初始化时,它会看到A是一个单例bean,并在将其与所有依赖项集连接后将其初始化为上下文。因此,当我们为A请求上下文时,从然后开始,它每次返回相同的bean,所以每次都会得到相同的B

您可以使用查找方法注入来解决/ 克服这个问题。请参阅此issue of YCM

答案 1 :(得分:0)

单例bean将始终引用同一个对象。原型将创建尽可能多的实例,引用bean。您提供的用例不会改变这种范例。