Java springbeans与scope原型
假设有以下海滩定义:Java springbeans与scope原型,java,spring,scope,javabeans,Java,Spring,Scope,Javabeans,假设有以下海滩定义: <bean id="singletonBean" class="..."> <property name="instanceBean" ref="instanceBean"/> </bean> <bean id="instanceBean" class="..." scope="prototype"/> singletonBean的属性instanceBean会被再次初始化吗?或者它只会使用已经创建的singleto
<bean id="singletonBean" class="...">
<property name="instanceBean" ref="instanceBean"/>
</bean>
<bean id="instanceBean" class="..." scope="prototype"/>
singletonBean
的属性instanceBean
会被再次初始化吗?或者它只会使用已经创建的singleton?instanceBean在启动时只设置一次,因此您可以通过singletonBean.getInstanceBean()
获得instanceBean
,如果您愿意的话
将只使用已经创建的单例
不会在每次从上下文获取单例时都重新创建单例的原型内部bean。singleton和all是引用是一对一创建的
但是
context.getBean(“instanceBean”)
将为您提供一个新的实例,因为作用域是“prototype”。当调用context.getBean(“singletonBean”)
时,它总是包含相同的instanceBean实例,尽管在bean定义中作用域是prototype
相反,如果容器bean是scopeprototype
,并且它引用了一个用scopesingleton
定义的bean,那么内部bean总是singleton。例如:-
<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");
OuterBean outer1=(OuterBean)context.getBean(“外部”);
OuterBean outer2=(OuterBean)context.getBean(“外部”);
这里,outer1
和outer2
都将包含InnerBean
的相同实例
在多头环境中,如果innerBean
持有任何共享数据,则可能导致竞争状况
<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");