提问:说说Spring Bean的生命周期?就这么回答

142 阅读1分钟
原文链接: www.toutiao.com

引言

上一篇《Bean的生命周期》详细讲述了BeanFactory的生命周期,本篇我们继续阐述下篇,废话不多说,直接进入正题。(本来想缓一天再写,写作有点累,但是下班到家一坐下来就忍不住……)

ApplicationContext中Bean的生命周期

仔细考量了一下上一篇的内容,觉得虽然面面俱到了,但是不利于大家快速阅读,所以这次决定以流程图的方式直接展示生命周期的过程,看这样会不会好一些。具体流程如下:

提问:说说Spring 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的生命周期到这就算是正式结束了,前后一共花了两篇去叙述,希望对不了解的人有所帮助!凡事还是需要多关注、多细究,只有真正掌握了,才是自己的!