5

当我创建一个新的 Spring ApplicationContext 时,例如通过

final ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfiguration.class);

Eclipse (STS 3.2.0) 会将其标记为潜在的资源泄漏,并抱怨它永远不会关闭('Resource leak: 'ac' is never closed)。

到现在为止还挺好。然后我试图调查这个问题,但找不到close()甚至shutdown()可以让我关闭ApplicationContext. 这是 Eclipse 警告失控、预期设计还是我遗漏了什么?

4

4 回答 4

7

您声明acApplicationContextwhich 没有定义close()方法。AnnotationConfigApplicationContext取而代之的是使用扩展Closeable(例如ConfigurableApplicationContext)提供close()释放所有资源所需的方法的任何超类型。

于 2013-06-24T07:34:45.240 回答
5

如果您使用 Java 7,则可以使用 try-with-resources 语句为您完成工作

try (AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(...))
{
  ...
}
于 2014-07-25T15:31:09.337 回答
4

是的,接口ApplicationContext没有close()方法,但子类AbstractApplicationContextGenericApplicationContextclose()and destroy()。所以,我建议改用它们。还有有用的方法registerShutdownHook()

于 2013-06-24T07:36:48.980 回答
0

将您的 ApplicationContext 向下转换为定义 close() 方法的 ConfigurableApplicationContext :

((ConfigurableApplicationContext)appCtx).close();

https://stackoverflow.com/a/14424009/466363

于 2017-05-04T19:43:42.310 回答