Java 春天的豆子能活多久?
当我在服务器上运行bean方法的第一个小部分(假设方法a)时,一切似乎都正常,但是当在这个carrierRESTWS bean(假设方法B)上第二次运行任何请求时,所使用的dao就是同一个carrierDAO实例。如何避免出现此问题,并在每次调用此carrierRESTWS bean时使注入使用dao的新实例 xml文件内的bean配置:Java 春天的豆子能活多久?,java,spring,spring-ioc,spring-rest,Java,Spring,Spring Ioc,Spring Rest,当我在服务器上运行bean方法的第一个小部分(假设方法a)时,一切似乎都正常,但是当在这个carrierRESTWS bean(假设方法B)上第二次运行任何请求时,所使用的dao就是同一个carrierDAO实例。如何避免出现此问题,并在每次调用此carrierRESTWS bean时使注入使用dao的新实例 xml文件内的bean配置: <bean id="carrierRESTWS" class="ar.com.anovo.controllers.rest.CarrierRESTWS"
<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”:
一旦需要注入,这将创建一个新实例
有关作用域的更多信息可以在中找到。spring中的默认作用域是
单例
,因此您需要显式设置作用域,以便在@Stefan使用prototype
指示时每次生成一个新实例,为什么需要非单例DAO?
<bean id="carrierDAO" class="ar.com.anovo.dao.CarrierDAO" scope="prototype" />