3

当我在服务器上运行 bean 方法的第一个请求(比如说方法 A)时,一切似乎都很好,但是当第二次在这个 carrierRESTWS bean 上运行任何请求时(比如说方法 B),正在使用的 dao 是相同的运营商DAO 实例。每次调用这个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>
4

3 回答 3

1

将“carrierDAO”的范围设置为“prototype”:

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

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

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

于 2015-09-22T20:50:23.533 回答
0

您的 bean 是单例 bean,因此它们的寿命与 Spring 容器的寿命一样长,这基本上意味着只要您的程序正在运行,这再次意味着只要您的 webapp 正在运行,理论上可能是几年。

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

于 2015-09-22T20:50:10.393 回答
0

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

于 2015-09-22T21:07:15.330 回答