带有范围原型的春豆

时间:2010-11-08 09:08:58

标签: java spring scope javabeans

假设有以下海滩定义:

<bean id="singletonBean" class="...">
   <property name="instanceBean" ref="instanceBean"/>
</bean>

<bean id="instanceBean" class="..." scope="prototype"/>

我打电话的时候:

singletonBean = context.getBean("singletonBean");

...some code...

singletonBean = context.getBean("singletonBean");

instanceBean的属性singletonBean会再次初始化,还是仅使用已创建的单例?

3 个答案:

答案 0 :(得分:4)

  

只使用已创建的单身人士。

每次从上下文获取单例时,都不会重新创建单例的原型内部bean。单身和所有是参考是为所有人创建的。

但是context.getBean("instanceBean");会给你一个新的,因为范围是'原型'。

答案 1 :(得分:0)

instanceBean仅在启动时设置一次,因此如果您愿意,可以通过instanceBean获取singletonBean.getInstanceBean()

答案 2 :(得分:0)

调用temp时,它始终包含Stock的相同实例,但bean定义中的范围为string Stock = string.Format("{0:G29}", decimal.Parse(Model.Stock.ToString())); @Html.TextBoxFor(model => Stock)

相反,如果容器bean的范围是context.getBean("singletonBean"),并且它引用了一个用范围instanceBean定义的bean,那么内部bean总是单例。例如: -

prototype

此处prototypesingleton都包含<bean id="outer" class="OuterBean" scope="prototype"> <property name="innerBean" ref="inner" /> </bean> <bean id="inner" class="InnerBean" scope="singleton"/> OuterBean outer1 = (OuterBean) context.getBean("outer"); OuterBean outer2 = (OuterBean) context.getBean("outer"); 的相同实例。

在多头环境中,如果outer1包含任何共享数据,则可能导致竞争状况。