欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring——管理Bean的生命周期

程序员文章站 2022-03-21 16:49:19
我们可以自定义bean的初始化和销毁方法,这里所指的的初始化和bean的构造不同,初始化是在bean构造完成后,对bean内部的属性或一些逻辑进行初始化。 首先要弄清一些概念: 构造(对象创建) 单实例:在容器启动时创建对象 多实例:在每次获取的时候创建对象 初始化:在对象创建后调用 销毁: 单实例 ......

我们可以自定义bean的初始化和销毁方法,这里所指的的初始化和bean的构造不同,初始化是在bean构造完成后,对bean内部的属性或一些逻辑进行初始化。

首先要弄清一些概念:

  1. 构造(对象创建)    
    1. 单实例:在容器启动时创建对象
    2. 多实例:在每次获取的时候创建对象
  2. 初始化:在对象创建后调用
  3. 销毁:
    1. 单实例:在容器关闭时执行销毁方法
    2. 多实例:容器不会管理,不会调用销毁方法

 


下面提供几种方法供参考

 

一、指定初始化和销毁方法

  在配置类中,我们可以通过@bean指定initmethod 和destroymethod ,分别指向类中的初始化和销毁方法。

 

二、实现initializingbean和disposablebean

  实现接口中的initializingbean(定义初始化逻辑)和destroy(定义销毁逻辑)方法即可。

 

三、通过@postconstruct和@predestroy注解

  在初始化和销毁方法上分别添加@postconstruct和@predestroy注解,这样就能给bean实现初始化和销毁。

 

四、后置处理器及其原理

后置处理器含义如下两个方法postprocessbeforeinitialization和postprocessafterinitialization,分别会在初始化前和初始化后执行。

Spring——管理Bean的生命周期

 Spring——管理Bean的生命周期

实现逻辑:

beanfactory在创建bean时,会先调用initializebean方法进行初始化,并在初始化前获取到所有后置处理器,并执行后置处理器的postprocessbeforeinitialization方法。

执行完所有后置处理器的postprocessbeforeinitialization方法后,接着beanfactory将执行完初始化。

初始化完成后,继续获取所有的后置处理器,循环执行所有的postprocessafterinitialization方法。


 方法三的实现逻辑也是通过后置处理器来完成的。

在执行postprocessbeforeinitialization时,会扫描标注有@postconstruct注解的方法的类,最终定位到对应方法并执行。