Spring——管理Bean的生命周期

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

首先要弄清一些概念:spa

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

 


下面提供几种方法供参考对象

 

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

  在配置类中,咱们能够经过@Bean指定initMethod 和destroyMethod ,分别指向类中的初始化和销毁方法。blog

 

2、实现InitializingBean和DisposableBean

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

 

3、经过@PostConstruct和@PreDestroy注解

  在初始化和销毁方法上分别添加@PostConstruct和@PreDestroy注解,这样就能给Bean实现初始化和销毁。it

 

4、实现后置处理器BeanPostProcessor接口

这里的两个方法postProcessBeforeInitialization和postProcessAfterInitialization,分别会在初始化前和初始化后执行。io

 

实现逻辑:

BeanFactory在建立bean时,会先调用initializeBean方法进行初始化,并在初始化前获取到全部后置处理器,并执行后置处理器的postProcessBeforeInitialization方法。容器

执行完全部后置处理器的postProcessBeforeInitialization方法后,接着BeanFactory将执行完初始化。配置

初始化完成后,继续获取全部的后置处理器,循环执行全部的postProcessAfterInitialization方法。循环


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

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

相关文章
相关标签/搜索