spring 个初始化的 bean 能活多久?

How long does an spring initialized bean live?

当我 运行 在服务器上第一次请求 bean 的方法(假设是方法 A)时,一切似乎都正常,但是当 运行 第二次请求此 carrierRESTWS bean 时(比方说方法 B),所使用的 dao 是同一个 carrierDAO 实例。每次调用此 carrierRESTWS bean 时,如何避免出现此问题并使注入使用新的 dao 实例?

xml 文件中的 Beans 配置:

<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>

你的 bean 是单例 bean,所以它们的寿命与 Spring 容器的寿命一样长,这基本上意味着只要你的程序是 运行,这又意味着只要你的 webapp 是 运行,理论上可能是几年。

既然你的控制器和你的 DAO 类 当然被编码为无状态的,并且支持多线程,你应该不会有单个共享实例的问题。

将"carrierDAO"的范围设为"prototype":

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

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

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

spring 中的默认范围是 singleton,因此您需要显式设置每次创建新实例的范围,正如@Stefan 所指示的 prototype.