1

我在spring框架中使用了预加载,所以我的bean是在容器中加载时创建的。我的 bean 实例是单例的。但我想使用延迟加载。据我了解,当使用延迟加载时,bean 的实例是在请求 bean 时创建的,但容器中不存在。

但我的要求是当对那个 bean 的操作完成时,我想垃圾收集那个 bean 实例。同样,当请求该 bean 时,我想以延迟加载的方式再次创建 bean。

因此,据我所知,当 bean 实例被垃圾收集后再次部署到容器中以创建 bean 实例时,我们必须在容器中重新部署它。我想在使用后在运行时对 bean 实例进行垃圾收集,并在请求时再次创建它的实例。是否可以在不重新部署的情况下使用spring和tomcat?

4

2 回答 2

2

Bean 作用域可能是最直接的方法。您可能需要“原型”,但“会话”和“请求”也可以在 Web 容器中使用。

如果您使用“会话”或“请求”并将 bean 注入单例 bean,则需要使用<aop:scoped-proxy/>

<bean id="userPreferences" class="com.foo.UserPreferences" scope="session">
    <aop:scoped-proxy/>
</bean>
于 2013-01-30T13:58:22.313 回答
2

您需要使用prototype范围 bean - 这些是在请求时创建的 bean,并且像常规对象一样被垃圾收集。

看看文档页面。您可以将 bean 声明为原型,将范围设置为原型:

<bean id="accountService" class="com.foo.DefaultAccountService" scope="prototype"/>
于 2013-01-30T12:42:31.027 回答