什么可能是在现实世界的应用程序中使用destroy方法的示例?为什么正在运行的应用程序想要销毁它的bean?如果bean是由用于Web应用程序的spring容器创建的,例如ContextLoaderListener,那么如何重新创建这些bean,因为容器已经启动.有没有办法重新启动弹簧IoC容器而无需重新启动应用程序服务器?
解决方法:
一个例子是DataSource或需要清理的任何资源.你可能会有这样的事情:
@Bean(destroyMethod = "close")
DataSource dataSource() {
....
}
这在具有多个类加载器的环境中尤其重要,例如应用程序服务器以防止内存泄漏.
有时候这样做是多余的,因为底层资源可以自己进行清理(比如作为servlet生命周期中contextDestroyed事件的一部分),但是你应该总是验证这一点.
这些弹簧docs也是一个有用的参考.引用的例子类似:
那么bean类:
public class ExampleBean {
public void cleanup() {
// do some destruction work (like releasing pooled connections)
}
}
可以刷新上下文.这个answer提供了一个很好的解释,当你可能想要这样做.
标签:java,spring,servlets
来源: https://codeday.me/bug/20190829/1758756.html