我使用Springframework的ClassPathXMLApplicationContext如下初始化一些bean:
ctx = new ClassPathXMLApplicationContext(filename);
而且我在应用程序出口处呼叫ctx.close()
。
但是,有时ctx的创建本身会给出一个异常(由于某些bean创建中的错误),由于该原因,我没有获得ctx对象。但是,在此异常之前,某些bean可能已成功初始化。
我的问题是,在这种情况下,我该如何执行ctx.close()
的等效功能,以清理可能已初始化的bean?
您可以配置您的bean,以使它们在上下文关闭时被上下文closed所取代。调用context.close
时,上下文将在此上下文创建的所有bean上关闭/(调用destroy方法)。
通常使用XML配置可关闭bean的方法是声明destroy-method,如:
<bean id=".." destroy-method="close" >..</bean>
或让bean实现
DisposableBean
接口,如:
public class MyBean implements DisposableBean { @Override public void destroy() throws Exception { System.out.println("destroy: called"); } }
另请参见(官方)指南Spring Shutdown Callbacks
如果您使用的是Java 7或更高版本,则可以在try中使用资源声明上下文初始化,这样就无需手动关闭上下文: