gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:53:38 26 4
gpt4 key购买 nike

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

ctx = new ClassPathXMLApplicationContext(filename);

我在应用程序退出时调用ctx.close()

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

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

最佳答案

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

try(final AbstractApplicationContext applicationContext = new ClassPathXmlApplicationContext(filename))
{
//write your code
} catch(Exception e){}

此外,在非 Web 应用程序环境中,您可以向 JVM 注册关闭 Hook 。这样做可以确保正常关闭并在单例 bean 上调用相关的销毁方法,以便释放所有资源。当然,您仍然必须正确配置和实现这些销毁回调。

要注册关闭 Hook ,请调用在 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 容器。

source: spring-framework-reference

关于java - 在 ClassPathXmlApplicationContext 中失败时销毁创建的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58449981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com