我在spring框架中使用了预加载,所以我的bean是在容器中加载时创建的。我的bean实例是单例。但我想使用延迟加载。据我所知,当使用延迟加载时,bean会在请求bean时创建,但在容器中不存在。
但我的要求是当对该bean的操作完成时,我想垃圾收集该bean实例。再次,当请求该bean时,我想以延迟加载的方式再次创建bean。
因此,据我所知,当bean实例被垃圾收集后,再次在容器中部署bean以创建bean实例时,我们必须在容器中重新部署它。我希望在使用后在运行时垃圾收集bean实例,并在请求时再次创建它的实例。是否可以在不重新部署的情况下使用spring和tomcat?
答案 0 :(得分:2)
您需要使用prototype
作用域bean - 这些是在请求时创建的bean,并且像常规对象一样被垃圾收集。
看看the documentation page。您可以将bean声明为原型,将范围设置为prototype:
<bean id="accountService" class="com.foo.DefaultAccountService" scope="prototype"/>
答案 1 :(得分:2)
Bean scoping可能是最简单的方法。您可能想要“原型”,但“会话”和“请求”也可以在Web容器中使用。
如果您正在使用“session”或“request”并将bean注入单个bean,则需要使用<aop:scoped-proxy/>
:
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session">
<aop:scoped-proxy/>
</bean>