如果您使用的是 Java 7 或更高版本,那么您可以在 try with resources 中声明您的上下文初始化,这样您就不需要手动关闭上下文:
try(final AbstractApplicationContext applicationContext = new ClassPathXmlApplicationContext(filename))
{
//write your code
} catch(Exception e){}
此外,在非 Web 应用程序环境中,您向 JVM 注册了一个关闭挂钩。这样做可确保正常关闭并在单例 bean 上调用相关的销毁方法,以便释放所有资源。当然,您仍然必须正确配置和实现这些销毁回调。
要注册关闭钩子,请调用在 AbstractApplicationContext 类上声明的 registerShutdownHook() 方法:
public static void main(final String[] args) throws Exception {
AbstractApplicationContext ctx
= new ClassPathXmlApplicationContext(new String []{"beans.xml"});
// add a shutdown hook for the above context...
ctx.registerShutdownHook();
// app runs here...
// main method exits, hook is called prior to the app shutting down... }
并且 Spring 的基于 Web 的 ApplicationContext 实现已经有代码可以在相关 Web 应用程序关闭时优雅地处理关闭 Spring IoC 容器。
来源:弹簧框架参考