论坛首页 Java企业应用论坛

一分钟掌握Spring中bean的生命周期

浏览 11775 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (6)
作者 正文
   发表时间:2011-11-09  
一分钟看完了,请问什么时候容器关闭?
0 请登录后投票
   发表时间:2011-11-09  
广告贴,这是变相的网站宣传,而且这个网站还在建立中。
0 请登录后投票
   发表时间:2011-11-09  
spring基础知识扫盲贴
0 请登录后投票
   发表时间:2011-11-09  
只能说,楼主太快了```
0 请登录后投票
   发表时间:2011-11-10  
唉。。。用了63秒。。。
0 请登录后投票
   发表时间:2011-11-10  
59秒,但是没掌握
0 请登录后投票
   发表时间:2011-11-10  
内容很好,速度跟不上。。。
0 请登录后投票
   发表时间:2011-11-23  
这不spring in action这本书里的?
0 请登录后投票
   发表时间:2011-12-12   最后修改:2011-12-12
楼主似乎忽略了很多东西,其实spring的beanfactory在管理bean时,大部分接口是依赖于beanpostprocessor的,他有两个主要的继承接口,instantiationbeanpostprocessor,initializationbeanpostprocessor,前者主要用于实例化前后做回调方法。
instantiationbeanpostprocessor主要有postProcessBeforeInstantiation,postProcessAfterInstantiation和postProcessPropertyValues三个方法,第一个是在实例化bean前调用,第二个在实例化之后调用,第三个则时在要注入属性前如果不需要依赖检查(DEPENDENCYcheck)的情况下调用。这三个方法是依次调用的。全部处理完后bean的属性就已经注入成功了。
然后就是beannameaware,beanclassloaderaware,beanfactoryaware三个接口的方法分别进行相关属性回填。
最后面则是对initializationbeanpostprocessor接口的处理,即postProcessBeforeInitialization和postProcessAfterInitialization两个方法,前者在initmethod(包括initializebean的afterpropetiesset和init-method)前调用,后者在initmethod之后调用。
还需要注意的是instantiationbeanpostprocessor还有一个比较重要的smartinstantiationbeanpostprocessor的继承接口,分别用于在预判bean类型(predicateBeanType),提前获得bean引用(getEarlyBeanReference),还有确认构造器(determineConstructorsFromBeanPostProcessors)判断有无实现该接口,实现了则调用。

beanfactory的依赖注入其实真的还是蛮复杂的。仔细看的话还比较有意思。涉及了大量的接口,要理清还是蛮困难的。而且仔细研究的话能学到很多东西,尤其对循环依赖(circular reference)的处理比较巧妙。此外spring对需要注入的属性还进行了大幅的处理,还是蛮难看懂的(大代码量,这段我至今还糊里糊涂的,主要看到各种resolver,holder很烦,不想看了,而且觉得对spring基本有了比较准确的把握了,就停止阅读了)。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics