spring初始化bean有多长时间了?

时间:2015-09-22 20:44:10

标签: java spring spring-ioc spring-rest

当我在服务器上运行bean方法的第一个小方法(让我们说方法A)时,一切似乎都没问题,但是当第二次运行这个carrierRESTWS bean上的任何请求时(让&# 39;说方法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>

3 个答案:

答案 0 :(得分:1)

将“carrierDAO”的范围设置为“原型”:

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

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

有关范围的更多信息,请参阅Spring Doc

答案 1 :(得分:0)

你的bean是单独的bean,所以它们只要Spring容器存在就会存在,这基本上只要你的程序正在运行,这意味着只要你的webapp正在运行,这理论上可能是几年

由于您的控制器和DAO类当然已被编码为无状态,并且支持多线程,因此单个共享实例不应该出现问题。

答案 2 :(得分:0)

spring中的默认范围是singleton,因此您需要显式设置每次创建一个新实例的范围,如@Stefan用prototype表示的那样。