一、问题解析
Spring 生命周期全过程大致分为五个阶段:创建前准备阶段、创建实例阶段、依赖注入阶段、容器缓存阶段和销毁实例阶段。
这张是 Spring Bean 生命周期完整流程图,其中对每个阶段的具体操作做了详细介绍:
(把这张图按照阶段截断,当我说第一个阶段时,就显示第一个阶段的图片,依次往后..)
1. 创建前准备阶段【干什么、作用】
这个阶段主要的作用是,Bean 在开始加载之前,需要从上下文和相关配置中解析并查找 Bean 有关的扩展实现,比如像`init-method`-容器在初始化 bean 时调用的方法、`destory-method`,容器在销毁 bean 时调用的方法。以及,BeanFactoryPostProcessor 这类的 bean 加载过程中的前置和后置处理。这些类或者配置其实是 Spring 提供给开发者,用来实现 Bean 加载过程中的扩展机制,在很多和 Spring 集成的中间件中比较常见,比如 Dubbo。
2. 创建实例阶段
这个阶段主要是通过反射来创建 Bean 的实例对象,并且扫描和解析 Bean 声明的一些属性。
3. 依赖注入阶段
如果被实例化的 Bean 存在依赖其他 Bean 对象的情况,则需要对这些依赖 bean 进行对象注入。比如常见的`@Autowired`、setter 注入等依赖注入的配置形式。同时,在这个阶段会触发一些扩展的调用,比如常见的扩展类:BeanPostProcessors(用来实现 bean 初始化前后的扩展回调)、
InitializingBean(这个类有一个 afterPropertiesSet(),这个在工作中也比较常见)、 BeanFactoryAware 等等。
4. 容器缓存阶段
容器缓存阶段主要是把 bean 保存到容器以及 Spring 的缓存中,到了这个阶段,Bean就可以被开发者使用了。这个阶段涉及到的操作,常见的有,`init-method`这个属性配置的方法, 会在这个阶
段调用。以及像 BeanPostProcessors 方法中的后置处理器方法如: postProcessAfterInitialization,也会在这个阶段触发。
5. 销毁实例阶段
当 Spring 应用上下文关闭时,该上下文中的所有 bean 都会被销毁。如果存在 Bean 实现了 DisposableBean 接口,或者配置了`destory-method`属性,会在这个阶段被调用。
相信大家对 Spring Bean 的生命周期有了深刻的印象了,需要视频中 Spring Bean 生命周期的高清流程图,可以私信我。在附赠一张高清的时序图给大家!
好的,本期高手系列的文章就到这里就结束了,喜欢的朋友一键三连,加个关注。
我是 浮生,一个工作了十四年的 Java 程序员,咱们下期见!
二、粉丝福利
我是浮生,一个工作十四年经验的Java程序员!
最近很多同学问我有没有java学习资料,我根据我从小白到架构师多年的学习经验整理出来了一份50W字面试解析文档、简历模板、学习路线图、java必看学习书籍 、 需要的小伙伴 可以关注我
公众号:“ 灰灰聊架构 ”, 回复暗号:“ 321 ”即可获取