玖叶教程网

前端编程开发入门

Spring中Bean的生命周期如何管理,11步,以及执行顺序!超详细!

在 Spring Framework 中,Bean 的生命周期是由 Spring 容器负责管理的。Spring 容器在运行时跟踪并管理 Bean 的整个生命周期,确保 Bean 能够在正确的时间进行实例化、初始化、使用和销毁。

下面是 Spring 中 Bean 的生命周期的详细过程:

  1. 实例化(Instantiation):容器根据配置文件或注解创建 Bean 的实例。这可以通过构造函数或工厂方法来完成。
  2. 属性赋值(Populate Properties):容器通过 setter 方法、字段注入等方式,将配置文件或注解中指定的属性值赋给 Bean。
  3. 前置初始化(Initialization Callbacks):在 Bean 的属性赋值完成后,容器会调用实现了 InitializingBean 接口的 afterPropertiesSet 方法,或者在配置文件中通过 init-method 属性指定的方法。
  4. 自定义初始化逻辑(Custom Initialization Logic):如果 BeanPostProcessor(后处理器)存在于容器中,它们将被调用,允许在 Bean 初始化之前和之后执行自定义逻辑。
  5. Bean 使用:在这个阶段,Bean 可以被应用程序正常使用,执行业务逻辑等。
  6. 后置初始化(Initialization Callbacks):如果 BeanPostProcessor 存在,它们将在 Bean 初始化完成后再次被调用,允许进行进一步的自定义操作。
  7. 销毁前回调(Destruction Callbacks):在 Bean 即将被销毁之前,容器会调用实现了 DisposableBean 接口的 destroy 方法,或者在配置文件中通过 destroy-method 属性指定的方法。
  8. 销毁(Destruction):最后,容器会销毁 Bean 实例,释放资源。

以上是常规浅显的理解,重点认识以下三个,实现了这三个接口的bean已经不是普通bean了:

它们的执行顺序:

BeanFactoryPostProcessor > InstantiationAwareBeanPostProcessor > FactoryBean

认识一下:

  1. BeanFactoryPostProcessor:这是 Spring 容器在读取 bean 定义后但在实例化任何 bean 之前调用的接口。它允许您修改容器中的 bean 定义,例如添加、修改或删除 bean 定义。这对于一些全局的配置或者对所有 bean 都需要的处理非常有用。
  2. InstantiationAwareBeanPostProcessor:这是 Spring 的一个特殊的 Bean 后处理器接口,用于在实例化 bean 之后但在属性赋值之前进行处理。这个接口允许您对 bean 实例进行修改,例如替换实例,以及在属性设置之前做一些准备工作。
  3. FactoryBean:FactoryBean 是一个接口,用于定义创建复杂对象的逻辑。它允许您定义一个工厂,该工厂可以在获取 bean 实例时返回自定义的对象。当 Spring 容器遇到实现了 FactoryBean 接口的 bean 定义时,实际上会使用工厂创建 bean 实例。

下面是这些接口和阶段在 Bean 生命周期中的执行顺序和管理关系:

  1. BeanFactoryPostProcessor:首先,Spring 容器会调用所有实现了 BeanFactoryPostProcessor 接口的类的 postProcessBeanFactory 方法,这允许您在实例化任何 bean 之前修改 bean 的定义。
  2. 实例化(Instantiation):Spring 容器开始实例化所有的 bean,这会涉及到 FactoryBean 的实例化,但不包括调用 FactoryBean 创建的实际 bean。
  3. InstantiationAwareBeanPostProcessor:对于每个 bean,Spring 容器会调用实现了 InstantiationAwareBeanPostProcessor 接口的类的 postProcessBeforeInstantiation 方法,允许您在 bean 实例化之前进行自定义操作。
  4. FactoryBean 创建实例:如果某个 bean 是 FactoryBean 的实现,Spring 容器会调用 FactoryBean 的 getObject 方法来创建实际的 bean 实例。
  5. 属性赋值(Populate Properties):Spring 容器会对 bean 进行属性赋值,将配置的属性值设置到 bean 实例中。
  6. 前置初始化(Initialization Callbacks):对于每个 bean,Spring 容器会调用实现了 InitializingBean 接口的 afterPropertiesSet 方法,以及在配置文件中通过 init-method 指定的初始化方法。
  7. 自定义初始化逻辑(Custom Initialization Logic):Spring 容器会调用所有实现了 BeanPostProcessor 接口的类的 postProcessBeforeInitialization 方法,允许您在 bean 初始化之前执行自定义逻辑。
  8. Bean 使用:在这个阶段,bean 可以被应用程序正常使用,执行业务逻辑等。
  9. 后置初始化(Initialization Callbacks):Spring 容器会调用所有实现了 BeanPostProcessor 接口的类的 postProcessAfterInitialization 方法,允许您在 bean 初始化之后执行自定义逻辑。
  10. 销毁前回调(Destruction Callbacks):在 bean 即将被销毁之前,Spring 容器会调用实现了 DisposableBean 接口的 destroy 方法,以及在配置文件中通过 destroy-method 指定的销毁方法。
  11. 销毁(Destruction):最后,Spring 容器会销毁 bean 实例,释放资源。

总之,Spring 容器负责管理 Bean 的整个生命周期,包括实例化、属性赋值、初始化、使用和销毁等阶段。各个接口和后处理器提供了丰富的扩展点,允许您在不同的生命周期阶段进行自定义操作。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言