当前位置: 首页 > news >正文

Bean 生命周期的关键阶段和详细流程

1. 实例化前(Bean 定义加载与解析)

BeanDefinition 扫描与注册:Spring Boot 启动时,通过 @ComponentScan 扫描指定包(默认是主类所在包及其子包)下的类(如 @Component、@Service、@Controller 等注解标记的类),将其解析为 BeanDefinition(Bean 的元数据,包含类名、作用域、依赖等信息),注册到 BeanDefinitionRegistry 中。此外,Spring Boot 的自动配置类(@Configuration + @Conditional 等)也会通过 @EnableAutoConfiguration 机制生成 BeanDefinition 并注册。

BeanFactory 准备:Spring 容器(如 ApplicationContext)内部通过 BeanFactory(默认 DefaultListableBeanFactory)管理 BeanDefinition,此时尚未创建实际的 Bean 实例。

2. 实例化(创建 Bean 对象)

通过构造器 / 工厂方法创建实例:

容器根据 BeanDefinition 信息,调用类的构造器(默认无参构造器,若有依赖则先解析构造器参数)或指定的工厂方法(如 @Bean 方法),创建 Bean 的原始实例(内存中分配对象,属性未初始化)。

若存在多个构造器,Spring 会根据参数匹配(如 @Autowired 标记的构造器)选择合适的构造器。

3. 属性注入(依赖注入,DI)

填充属性:

容器根据 BeanDefinition 中的依赖信息,将其他 Bean 或值(如 @Value 注入的配置)通过 setter 方法、字段注入(@Autowired 直接标记字段)或 构造器注入(已在实例化阶段完成)注入到当前 Bean 中。

依赖注入的核心是通过 BeanFactory 的 getBean() 方法获取依赖的 Bean,若依赖未创建则触发其生命周期(递归过程)。

4. 初始化前(Aware 接口回调)

感知容器信息:

若 Bean 实现了 Spring 的 Aware 系列接口,容器会在初始化前回调对应的方法,注入容器相关的资源:

  • BeanNameAware:注入当前 Bean 的名称(setBeanName(String name))。

  • BeanClassLoaderAware:注入类加载器(setBeanClassLoader(ClassLoader classLoader))。

  • BeanFactoryAware:注入 BeanFactory 实例(setBeanFactory(BeanFactory beanFactory))。

  • 若容器是 ApplicationContext,还会处理 ApplicationContextAware(注入上下文)、EnvironmentAware(注入环境配置)等。

5. 初始化前(BeanPostProcessor 前置处理)

执行 BeanPostProcessor.postProcessBeforeInitialization():

所有注册到容器的 BeanPostProcessor(Bean 后置处理器)会对当前 Bean 进行前置处理。

例如:

  • AutowiredAnnotationBeanPostProcessor:处理 @Autowired、@Value 注入(补充属性注入阶段的逻辑)。

  • CommonAnnotationBeanPostProcessor:处理 @Resource、@PostConstruct 等注解。

  • 自定义 BeanPostProcessor 可在此阶段修改 Bean 实例(如代理增强)。

6. 初始化(自定义初始化逻辑)

  • 执行 @PostConstruct 注解方法:若 Bean 的方法标注了 @PostConstruct(JSR-250 规范),容器会在此阶段调用该方法(由 CommonAnnotationBeanPostProcessor 触发),用于执行初始化逻辑(如资源加载)。

  • 执行 InitializingBean 接口方法:若 Bean 实现了 InitializingBean 接口,容器会调用其 afterPropertiesSet() 方法,在属性注入完成后执行初始化逻辑。

  • 执行自定义初始化方法:若在 @Bean(initMethod = "init") 或 XML 配置中指定了初始化方法(如 <bean init-method="init"/>),容器会调用该方法。

7. 初始化后(BeanPostProcessor 后置处理)

  • 执行 BeanPostProcessor.postProcessAfterInitialization():

  • 所有 BeanPostProcessor 对当前 Bean 进行后置处理,这是 Bean 初始化完成后的最后一步修改机会。典型应用:

  • AOP 代理生成:AnnotationAwareAspectJAutoProxyCreator 在此阶段为符合条件的 Bean 创建代理对象(如被 @Transactional、@Aspect 标记的类)。

  • 自定义增强:对 Bean 进行包装或功能扩展。

8. 就绪(Bean 可用)

经过上述阶段后,Bean 已完全初始化,被放入容器的缓存中(单例 Bean 存储在 singletonObjects 缓存),可被其他 Bean 引用或通过 ApplicationContext.getBean() 获取使用。

9. 销毁前(容器关闭阶段)

  • 执行 @PreDestroy 注解方法:若 Bean 的方法标注了 @PreDestroy(JSR-250 规范),容器关闭时会调用该方法(由 CommonAnnotationBeanPostProcessor 触发),用于释放资源(如关闭连接)。

  • 执行 DisposableBean 接口方法:若 Bean 实现了 DisposableBean 接口,容器会调用其 destroy() 方法,执行销毁逻辑。

  • 执行自定义销毁方法:若在 @Bean(destroyMethod = "destroy") 或 XML 配置中指定了销毁方法(如 <bean destroy-method="destroy"/>),容器会调用该方法。

10. 销毁(Bean 回收)

容器关闭后(如 Spring Boot 应用停止),Bean 被从容器中移除,内存由 JVM 垃圾回收机制回收。

 

总结:核心流程简化

 

BeanDefinition 注册 → 实例化 → 属性注入 → Aware 回调 → 初始化前(BeanPostProcessor) → 初始化(@PostConstruct → InitializingBean → 自定义方法) → 初始化后(BeanPostProcessor) → 就绪 → 销毁前(@PreDestroy → DisposableBean → 自定义方法) → 销毁

 

Spring Boot 对该流程的简化主要体现在自动配置(减少手动注册 BeanDefinition)和默认启用常用 BeanPostProcessor(如处理注解的处理器),但核心生命周期与 Spring 框架一致。

http://www.gsyq.cn/news/26095.html

相关文章:

  • https://juejin.cn/post/7529730683963588627
  • PCB布线一定不能走直角吗?一个或许有些离经叛道又颠覆常识的答案
  • 替代ftp的文件传输协议:提升数据安全与传输效率的新选择
  • Gitee DevOps:中国企业的研发效能加速器
  • 软件中版本号V1.0.0含义
  • LabVIEW继电保护检测 - 教程
  • 数据安全交换系统介绍及其应用场景分析
  • DBeaver 设置语言为中文
  • 国内开发者如何选择最适合的代码管理工具?Gitee、GitHub、Bitbucket横向评测
  • 2025国产ITSM厂商选型指南:聚焦五大ITSM平台,赋能企业数字化运维
  • 理解C++20的革命特性——协程支持1 - 实践
  • 飞驰云联亮相军工数字化转型发展峰会 共筑军工数字生态新范式
  • 2025 年土工布生产厂家最新推荐榜权威发布:聚焦 3 万平厂房与 50 年寿命产品,优选实力品牌
  • 2025年10月留香沐浴露排行:蓝蕨等五款香水级体验评测
  • 2025 年工业连接器厂家最新推荐榜单:聚焦 M8/M12 / 防水 / 重载 / 以太网品类,精选优质国产企业助力高效采购
  • 2025 年药包材辅导公司最新推荐榜:GMP 验证 / 质量体系 / 实验室装修等服务优质机构权威评选
  • 2025年10月防脱生发产品推荐榜:十款临床验证口碑对比
  • 界面控件DevExpress WPF v25.2新功能预览 - 聚焦AI功能提升
  • 【开题答辩实录分享】以《 Python基于大数据的四川旅游景点数据分析与可视化》为例进行答辩实录分享 - 实践
  • ida pro 9.2 接入 ida-pro-mcp
  • 2025 年淬火炉源头厂家最新推荐榜:聚焦技术创新与市场口碑深度解析,精选优质企业供采购参考
  • 2025 年国际物流服务公司最新推荐排行榜:覆盖海运快递跨境专线,精选优质企业助力跨境电商商家高效选择合作伙伴
  • 2025 年最新推荐立体画厂家权威榜单:涵盖 3D 光栅 / 装饰 / 三维等品类,助力精准选优质厂家
  • WSL1升级为WSL2
  • 详细介绍:关于容器Docker
  • 实用指南:【办公类-116-01】20250929家长会PPT(Python快速批量制作16:9PPT相册,带文件名,照片横版和竖版)
  • 完整教程:计算机视觉进阶教学之Mediapipe库(一)
  • 2025年发电机厂家推荐排行榜,发电机组,柴油发电机组,康明斯发电机,玉柴发电机,高压发电机,大功率发电机公司推荐
  • 2025年信息流代运营服务商权威推荐榜:专业投放策略与高转化效果深度解析
  • 2025 年大路灯品牌最新推荐榜,技术实力与市场口碑深度解析,精选优质源头厂家