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註解的方法的類,最終定位到對應方法並執行。

相關文章
相關標籤/搜索