java - Spring bean销毁方法

标签 java spring servlets

在实际应用程序中使用 destroy 方法的可能示例是什么?为什么正在运行的应用程序想要销毁它的 bean?如果 bean 是由 web 应用程序的 spring 容器创建的,比如 ContextLoaderListener,那么如何重新创建这些 bean,因为容器已经启动。有没有办法在不重启应用服务器的情况下重启 spring IoC 容器?

最佳答案

一个例子是 DataSource 或任何需要清理的资源。你可能有这样的事情:

@Bean(destroyMethod = "close")
DataSource dataSource() {
 ....
}

这在具有多个类加载器的环境中尤其重要,例如应用程序服务器以防止内存泄漏。

有时这样做是多余的,因为底层资源可能会进行自己的清理(比如作为 servlet 生命周期中 contextDestroyed 事件的一部分),但您应该始终验证这一点。

这些 Spring docs也是一个有用的引用。那里引用的例子是类似的:

<bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup"/>

然后是bean类:

public class ExampleBean {

    public void cleanup() {
        // do some destruction work (like releasing pooled connections)
    }
}

可以刷新上下文。这answer对此提供了很好的解释,以及您何时可能想要这样做。

关于java - Spring bean销毁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36805422/

相关文章:

tomcat - 如果我在 Tomcat 中编写 servlet 和一些 JSON/REST 代码,我需要 EE SDK 还是 judt JDK?

java - 由于 web.xml,内容未显示在 profile.jsp 上?

java - String[][] 出现越界异常错误

java - 打开lucene索引时出错: java. io.IOException:映射失败

java - 项目所有者帐户的 Google Pub Sub "Permission Denied"

java - Spring 安全: How to Return 503 Service Unavailable?

java - 我的 NavigationDrawer 中的 TextView 文本垂直剪切

java - 如何使用 Spring Batch 查看集群中的所有作业?

java - 使用 swagger 创建 api 文档

java - 使用两个类路径编译 servlet