引言
上一篇《Bean的生命周期》详细讲述了BeanFactory的生命周期,本篇我们继续阐述下篇,废话不多说,直接进入正题。(本来想缓一天再写,写作有点累,但是下班到家一坐下来就忍不住……)
ApplicationContext中Bean的生命周期
仔细考量了一下上一篇的内容,觉得虽然面面俱到了,但是不利于大家快速阅读,所以这次决定以流程图的方式直接展示生命周期的过程,看这样会不会好一些。具体流程如下:
如上图所示,特别红色标注的地方就是“与众不同”的地方。
Bean在ApplicationContext和BeanFactory中生命周期的区别
先说明一下,上一篇的口诀仍然适用!因为ApplicationContext中Bean的生命周期跟BeanFactory中差不多,唯一的区别在于:
调用BeanFactoryAware接口的setBeanFactory()方法之后,并不是紧接着调用BeanPostProcessor的接口,而是判断如果Bean实现了ApplicationContextAware接口,则调用其setApplicationContext()方法,然后才是接着调用BeanPostProcessor.postProcessBeforeInitialization()方法。
为什么应用开发时都选择Application,而不选择BeanFactory
- Application的自动注册
Application直接使用反射自动识别诸如BeanPostProcessor、InstantiationAwareBeanPosrProcessor、BeanFactoryPostProcessor等等接口,并自动将他们注册到应用上下文中。
- BeanFactory的手工注册
BeanFactory却无法自动完成注册,它需要在代码中手工调用addBeanPostProcessor()方法才能完成注册。
结束语
好了,Bean的生命周期到这就算是正式结束了,前后一共花了两篇去叙述,希望对不了解的人有所帮助!凡事还是需要多关注、多细究,只有真正掌握了,才是自己的!