我正在阅读Pro Spring 2.5书,并在第4章中讨论生命周期回调。当一个实例被销毁时,Spring如何能够通知它(在我阅读它之后,它只能在singleton上使用)?使用什么机制?Spring如何通知有关实例何时销毁的信息?
2
A
回答
3
这里没有魔法,当销毁BeanFactory
/ApplicationContext
时调用销毁回调函数(调用close()
方法)。在桌面应用程序中,这必须手动完成,在servlet环境中,用于启动应用程序上下文的相同机制(通常为ContextLoaderListener
)被处理为您销毁。
有两点需要注意:
销毁是需要的对象重要的明确清理比如数据库连接池(
DataSource
)或线程。豆被破坏以相反的顺序相比,创建顺序。这是可以理解的:当豆
A
取决于B
时,B
必须先创建。当豆A
被销毁时,B
必须被销毁,否则A
将无法在销毁阶段访问其依赖关系。
此外Spring还允许您自动注册shutdown hook以自动处理关闭。我不会建议,但只是为了记录:
ConfigurableApplicationContext ctx = new ClassPathXmlApplicationContext(...)
ctx.registerShutdownHook();
0
这取决于你的环境中,如果你在一个Web应用程序运行的,春天是“已确定”一旦你的servlet上下文被破坏,因此它可以告诉所有的这是他们将要被销毁的对象。
BTW,临春2.5是真的老了,你应该抓住一个新的书,因为有很多的东西,2.5和3.x系列之间变化。
相关问题
- 1. 如何销毁heatmap.js实例?
- 2. 如何销毁cytoscape.js实例
- 3. 如何获取有关已销毁工作项目的信息?
- 4. 角度何时销毁指令实例?
- 5. 的Java如何销毁Singleton实例
- 6. 如何销毁模板实例?
- 7. InstanceAlreadyExistsException如何卸载/销毁实例
- 8. 如何销毁imageflow jquery插件实例?
- 9. 如何正确销毁CKEditor实例?
- 10. 销毁Selectize.js实例
- 11. ux通知。如何销毁通知窗口?
- 12. 如何销毁Croppie jQuery现有的实例?
- 13. 如何销毁一个有角度的工厂实例
- 14. 如何使用ExtJS销毁对象的所有实例?
- 15. 销毁预制实例
- 16. 销毁调用实例
- 17. 如何在销毁/清理对象实例时返回值
- 18. 有关电池的通知栏信息
- 19. 如何从AMI id找出有关EC2实例的信息?
- 20. 如何收集有关ec2实例的metadata/os信息?
- 21. 如何知道何时创建和销毁临时对象?
- 22. 如何在注销时销毁活动?
- 23. 我如何真的*销毁jssor的一个实例?
- 24. 如何观察对象实例的创建/销毁?
- 25. 如何在Ruby on Rails中销毁嵌套的资源实例?
- 26. 如何销毁unity3d中的实例化(克隆)对象?
- 27. 如何销毁fineuploader实例并使用jquery创建一个新的实例?
- 28. Ruby中对象销毁的通知
- 29. 显式销毁glassfish上的EJB实例
- 30. SKNode上的removeFromParent是否销毁实例?
啊,所以如果你不调用关闭的BeanFactory/ApplicationContext这不会导致事件被触发? – LuckyLuke 2012-03-17 18:21:15
@Viper nope,正如我所说的,这里没有魔法。如果您明确创建了应用程序上下文,则必须显式关闭它。另外Spring不会调用'prototype'作用域bean的生命周期回调函数 - 因为它在创建和初始化后没有跟踪它们 – 2012-03-17 18:23:28
我认为你误解了这个注释,那就是我所说的:如果你不关闭它不会调用销毁生命周期回调。无论如何,谢谢你:) – LuckyLuke 2012-03-17 18:28:10