在ClassPathXmlApplicationContext中失败时销毁创建的bean

问题描述 投票:0回答:2

我使用Springframework的Cla​​ssPathXMLApplicationContext如下初始化一些bean:

ctx = new ClassPathXMLApplicationContext(filename);

而且我在应用程序出口处呼叫ctx.close()

但是,有时ctx的创建本身会给出一个异常(由于某些bean创建中的错误),由于该原因,我没有获得ctx对象。但是,在此异常之前,某些bean可能已成功初始化。

我的问题是,在这种情况下,我该如何执行ctx.close()的等效功能,以清理可能已初始化的bean?

java spring applicationcontext spring-framework-beans
2个回答
0
投票

您可以配置您的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


0
投票

如果您使用的是Java 7或更高版本,则可以在try中使用资源声明上下文初始化,这样就无需手动关闭上下文:

© www.soinside.com 2019 - 2024. All rights reserved.