我正在阅读Pro Spring 2.5书,在第4章中他们谈到了生命周期的回调。当一个实例被销毁时(在我阅读之后它只能在单身人士身上获得),Spring如何通知?使用了什么机制?
答案 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系列之间都有所改变。