spring bean的生命周期

2023-12-14 14:09:36

spring bean的生命周期

一,流程图

Yes
No
Bean定义
Bean实例化
依赖注入
设置Bean名称
BeanFactoryAware
ApplicationContextAware
BeanPostProcessor前置处理
InitializingBean.afterPropertiesSet
自定义init-method
BeanPostProcessor后置处理
Bean准备就绪
应用程序运行
DisposableBean.destroy
自定义destroy-method
Bean销毁

Spring Bean的生命周期
实际上,Spring Bean的生命周期可以分为以下四个阶段:

  1. 实例化阶段(Instantiation):这个阶段,Spring容器根据Bean定义创建Bean的实例。

  2. 属性赋值阶段(Population):这个阶段,Spring容器将通过依赖注入或其他方式将属性值赋给Bean。

  3. 初始化阶段(Initialization):这个阶段,Spring容器会调用Bean的初始化方法,例如实现了InitializingBean接口的afterPropertiesSet()方法或自定义的init-method。

  4. 销毁阶段(Destruction):这个阶段,当Spring容器关闭时或手动销毁Bean时,会调用Bean的销毁方法,例如实现了DisposableBean接口的destroy()方法或自定义的destroy-method。

在这四个阶段中,Spring提供了多个扩展点(Extension Points)来影响Bean的生命周期:

  1. BeanPostProcessor:这是一个接口,提供了在Bean实例化和初始化阶段前后进行处理的方法,可以对Bean进行自定义的前置处理和后置处理。

  2. InstantiationAwareBeanPostProcessor:这是BeanPostProcessor接口的子接口,提供了在Bean实例化阶段的更细粒度的处理方法,例如可以在实例化Bean之前自定义Bean的实例化过程。

  3. BeanFactoryPostProcessor:这是一个接口,用于在容器实例化Bean之前修改Bean定义或进行其他自定义操作。

这些扩展点可以影响多个Bean的生命周期,从而实现对Bean的统一处理。另外,还有一些扩展点可以影响单个Bean的生命周期,例如Bean的初始化方法和销毁方法,以及通过实现Aware接口来获取容器资源。

二,流程图描述的是Spring Bean的生命周期的详细阶段:

  1. Bean定义:这是Spring Bean生命周期的开始,你在Spring配置文件中定义一个Bean,或者通过注解定义一个Bean。
  2. Bean实例化:Spring容器开始实例化这个Bean。
  3. 依赖注入:根据你的配置,Spring容器注入Bean的依赖。
  4. 设置Bean名称:如果Bean实现了BeanNameAware接口,Spring容器会调用它的setBeanName方法,设置Bean的名称。
  5. BeanFactoryAware:如果Bean实现了BeanFactoryAware接口,Spring容器会调用它的setBeanFactory方法,传入BeanFactory的实例。
  6. ApplicationContextAware:如果Bean实现了ApplicationContextAware接口,Spring容器会调用它的setApplicationContext方法,传入ApplicationContext的实例。
  7. BeanPostProcessor前置处理:Spring容器运行所有注册的BeanPostProcessor的postProcessBeforeInitialization方法。
  8. InitializingBean.afterPropertiesSet:如果Bean实现了InitializingBean接口,Spring容器会调用它的afterPropertiesSet方法。
  9. 自定义init-method:如果Bean在配置文件中定义了init-method,Spring容器会调用这个方法。
  10. BeanPostProcessor后置处理:Spring容器运行所有注册的BeanPostProcessor的postProcessAfterInitialization方法。
  11. Bean准备就绪:现在Bean已经准备就绪,可以被应用程序使用了。
  12. 应用程序运行:应用程序正在运行,Bean正在被使用。
  13. DisposableBean.destroy:如果应用程序结束,或者Spring容器关闭,且Bean实现了DisposableBean接口,Spring容器会调用它的destroy方法。
  14. 自定义destroy-method:如果Bean在配置文件中定义了destroy-method,Spring容器会调用这个方法。
  15. Bean销毁:现在Bean已经被销毁。

文章来源:https://blog.csdn.net/qq_49841284/article/details/134909631
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。