一个由Spring初始化的bean的生命周期有多长?

3
当我在服务器上第一次运行bean方法的第一个请求时(假设是方法A),一切似乎都很好,但是在针对此carrierRESTWS bean(假设为方法B)运行第二次任何请求时,使用的dao是同一个carrierDAO实例。如何避免这个问题并使注入每次调用此carrierRESTWS bean时使用新的dao实例?
xml文件中的bean配置:
<bean id="carrierRESTWS" class="ar.com.anovo.controllers.rest.CarrierRESTWS">
        <property name="carrierDAO" ref="carrierDAO"/>
 </bean>

<bean id="carrierDAO" class="ar.com.anovo.dao.CarrierDAO"></bean>

为什么需要非单例DAO? - fps
3个回答

1
你的bean是单例模式,因此它们会在Spring容器存活期间一直存在,这基本上意味着在你的程序运行期间一直存在,这又意味着在你的Web应用程序运行期间一直存在,理论上可能会持续数年。
由于你的控制器和DAO类当然已经被编写为无状态并支持多线程,所以你不应该有使用单个共享实例的问题。

1
将"carrierDAO"的作用域设置为"prototype":
<bean id="carrierDAO" class="ar.com.anovo.dao.CarrierDAO" scope="prototype" />

一旦需要注入,这将创建一个新的实例。

有关范围的更多信息可以在Spring Doc中找到。


0

Spring框架中的默认作用域是singleton,因此您需要显式设置作用域,使每次都创建一个新实例,就像@Stefan所指示的那样使用prototype


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接