Spring如何通知实例何时被销毁?

时间:2012-03-17 17:55:05

标签: java spring

我正在阅读Pro Spring 2.5书,在第4章中他们谈到了生命周期的回调。当一个实例被销毁时(在我阅读之后它只能在单身人士身上获得),Spring如何通知?使用了什么机制?

2 个答案:

答案 0 :(得分:3)

这里没有魔法,当BeanFactory / ApplicationContext被销毁(调用close()方法)时会调用destroy回调。在桌面应用程序中,这必须手动完成,在servlet环境中,用于启动应用程序上下文(通常为ContextLoaderListener)的相同机制会为您进行销毁。

两个注释:

  • 销毁对于需要显式清理的对象非常重要,例如数据库连接池(DataSource)或线程。

  • 与创建顺序相比,Bean以相反的顺序被销毁。这是可以理解的:当bean A依赖于B时,必须首先创建B。当bean A被销毁时,之后必须销毁B,否则A将无法在销毁阶段访问其依赖项。

Spring还允许您自动注册shutdown hook以自动处理关机。我不会建议,但只是为了记录:

ConfigurableApplicationContext ctx = new ClassPathXmlApplicationContext(...)
ctx.registerShutdownHook();

答案 1 :(得分:0)

这取决于您的环境,如果您在网络应用程序中运行,那么Spring已经完成了#34;一旦你的servlet上下文被销毁,它就可以告诉所有它们将被销毁的对象。

顺便说一下, Pro Spring 2.5 真的很老了,你应该抓一本新书,因为很多东西在2.5和3.x系列之间都有所改变。