Spring Bean 的生命周期

求阙者

关注

阅读 22

04-09 09:00

Spring Bean 的生命周期包括了从创建到销毁的一系列过程。具体来说,Spring 容器会在启动时创建和初始化 Beans,并在容器关闭时销毁这些 Beans。以下是 Spring Bean 生命周期的详细步骤:

1. Bean 实例化(Instantiation)

  • 当容器启动时,Spring 会根据 Bean 的定义(通过配置文件或者注解)实例化 Bean。Spring 会使用无参构造方法或者配置的工厂方法来实例化 Bean 对象。

2. 设置 Bean 属性(Populating Properties)

  • Spring 会通过依赖注入(DI)将 Bean 的属性设置为配置文件或注解中定义的值。如果使用注解如 @Autowired,Spring 会自动注入相关的依赖。

3. 调用 BeanNameAwaresetBeanName() 方法

  • 如果 Bean 实现了 BeanNameAware 接口,Spring 会调用 setBeanName() 方法,传入 Bean 的名称。

4. 调用 BeanFactoryAwareApplicationContextAware 的相应方法

  • 如果 Bean 实现了 BeanFactoryAwareApplicationContextAware 等接口,Spring 会分别调用 setBeanFactory()setApplicationContext() 方法,传入相应的工厂或上下文对象。

5. 调用 setBeanClassLoader()(如果实现了 BeanClassLoaderAware

  • 如果 Bean 实现了 BeanClassLoaderAware 接口,Spring 会调用 setBeanClassLoader() 方法。

6. 初始化前的 @PostConstruct 或实现 InitializingBean 接口

  • 如果 Bean 定义了 @PostConstruct 注解,Spring 会在所有属性设置完毕后调用该方法。
  • 如果 Bean 实现了 InitializingBean 接口,Spring 会调用 afterPropertiesSet() 方法。
  • 如果通过 XML 配置了 init-method,Spring 会调用配置的初始化方法。

7. 初始化(Initialization)

  • 在所有属性注入和 Aware 方法调用之后,Spring 会调用 Bean 的初始化方法。可以通过配置 init-method 或实现 InitializingBean 来指定初始化过程。

8. 使用 Bean

  • Bean 进入正常的工作状态,可以提供服务给应用程序。此时,Bean 已经完全初始化,准备好使用。

9. 销毁前的 @PreDestroy 或实现 DisposableBean 接口

  • 当容器销毁时,Spring 会先调用 @PreDestroy 注解方法(如果有的话)。
  • 如果 Bean 实现了 DisposableBean 接口,Spring 会调用 destroy() 方法。
  • 如果通过 XML 配置了 destroy-method,Spring 会调用指定的销毁方法。

10. 销毁(Destruction)

  • 在容器关闭时,Spring 会销毁所有 Bean。销毁的顺序是从容器中最“底层”的 Bean 开始,直到销毁最“顶层”的 Bean。

总结:

  1. 实例化 → 2. 依赖注入 → 3. Aware 方法 → 4. 初始化 → 5. 使用 → 6. 销毁

精彩评论(0)

0 0 举报