Spring Bean 生命周期的执行流程

问题描述

Spring 生命周期全过程大致分为五个阶段:

1、创建前准备阶段

2、创建实例阶段

3、依赖注入阶段

4、 容器缓存阶段

5、销毁实例阶段

下图是 Spring Bean 生命周期完整流程图,其中对每个阶段的具体操作做了详细介绍:


一、创建前准备阶段【干什么、作用】

这个阶段主要的作用是,Bean 在开始加载之前,需要从上下文和相关配置中解析并查找 Bean 有关的扩展实现, 比如像

  • `init-method`,容器在初始化 bean 时调用的方法。
  • `destory-method`,容器在销毁 bean 时调用的方法。
  • BeanFactoryPostProcessor 这类的 bean 加载过程中的前置和后置处理。

这些类或者配置其实是 Spring 提供给开发者,用来实现 Bean 加载过程中的扩展机制, 在很多和 Spring 集成的中间件中比较常见,比如 Dubbo。


二、创建实例阶段

这个阶段主要是通过反射来创建 Bean 的实例对象,并且扫描和解析 Bean 声明的一些属性。


三、依赖注入阶段

如果被实例化的 Bean 存在依赖其他 Bean 对象的情况,则需要对这些依赖 Bean 进行对象注入。比如常见的`@Autowired`、setter 注入等依赖注入的配置形式。

同时,在这个阶段会触发一些扩展的调用,比如常见的扩展类:BeanPostProcessors (用来实现 bean 初始化前后的扩展回调)、 InitializingBean(这个类有一个 afterPropertiesSet(),这个在工作中也比较常见)、 BeanFactoryAware 等等。


四、容器缓存阶段

容器缓存阶段主要是把 Bean 保存到容器以及 Spring 的缓存中,到了这个阶段,Bean 就可以被开发者使用了。 这个阶段涉及到的操作,常见的有,`init-method`这个属性配置的方法, 会在这个阶段调用。 以及像 BeanPostProcessors 方法中的后置处理器方法如: postProcessAfterInitialization,也会在这个阶段触发。


五、销毁实例阶段

当 Spring 应用上下文关闭时,该上下文中的所有 Bean 都会被销毁。 如果存在 Bean 实现了 DisposableBean 接口,或者配置了`destory-method`属性,会在这个阶段被调用。

下面是流程图

相关推荐
豐儀麟阁贵1 分钟前
9.4字符串操作
java·linux·服务器·开发语言
我的offer在哪里2 分钟前
MySQL 高频细节问题(覆盖性能、存储、运维、故障排查,补充前文未深入的核心细节)
android·运维·mysql
qq_717410014 分钟前
删除设置-声音-有来电时响铃并振动,手机铃声
android
武子康6 分钟前
Java-181 OSS 实战指南:Bucket/外链/防盗链/计费与常见坑
java·大数据·分布式·oss·云存储·fastdfs·ali
dazhong20127 分钟前
Android Studio 安装之历史版本下载问题解决
android·ide·android studio
聆风吟º7 分钟前
【Spring Boot 报错已解决】告别“Whitelabel Error Page”:Spring Boot 404报错的排查指南
java·spring boot·后端
w10463672p8 分钟前
java解析CSV文件(一)——Java使用Apache.Commons.CSV解析CSV文件应用实践
java·apache·springboot·csv
weixin_3077791310 分钟前
Jenkins Gson API插件:统一JSON处理的基础库
java·运维·开发语言·架构·jenkins
Tony66668888821 分钟前
Webservic 服务注册发布及参数封装-实际项目应用
java·spring·servlet
老华带你飞24 分钟前
零食商城|基于springboot + vue零食商城管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·毕设