我正在阅读 Pro Spring 2.5 这本书,在第 4 章中他们讨论了生命周期回调。 Spring 如何在实例被销毁时发出通知(据我所知,它仅适用于单例)?使用什么机制?
最佳答案
这里没有魔法,当 BeanFactory
/ApplicationContext
被销毁(调用 close()
方法)时,会调用销毁回调。在桌面应用程序中,这必须手动完成,在 servlet 环境中,用于启动应用程序上下文(通常为 ContextLoaderListener
)的相同机制会为您处理销毁。
两个注意事项:
销毁对于需要显式清理的对象(例如数据库连接池 (
DataSource
) 或线程)非常重要。Bean 的销毁顺序与创建顺序相反。这是可以理解的:当bean
A
依赖于B
时,必须首先创建B
。当beanA
被销毁时,B
必须随后被销毁,否则A
在销毁阶段将无法访问其依赖项。
Spring还允许自动注册shutdown hook自动处理关机。我不建议这样做,但仅供记录:
ConfigurableApplicationContext ctx = new ClassPathXmlApplicationContext(...)
ctx.registerShutdownHook();
关于java - Spring 如何通知实例何时被销毁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9752371/