我正在使用Spring 4.3。我正在使用ConfigurableApplicationContext
并在其上调用close()
。正如预期的那样,用@PreDestroy
注释的方法被称为。
但我已经看到,即使我不调用close,也会调用@PreDestroy
方法。如果没有调用close()
,我的印象是存在内存泄漏的可能性。我错了吗?
另外,如果我正在使用Web应用程序,关闭applicationcontext的正确方法是什么,regsiterShutdownHook?
答案 0 :(得分:1)
你可以注册shutdown hook:
ConfigurableApplicationContext context = SpringApplication.run(Test.class, args);
context.registerShutdownHook();
或添加一个侦听器来执行某些操作:
ConfigurableApplicationContext context = SpringApplication.run(Test.class, args);
context.addApplicationListener(new ApplicationListener<ContextClosedEvent>() {
@Override
public void onApplicationEvent(ContextClosedEvent event) {
// some logic
}
});