咱們能夠自定義bean的初始化和銷燬方法,這裏所指的的初始化和bean的構造不一樣,初始化是在bean構造完成後,對bean內部的屬性或一些邏輯進行初始化。post
首先要弄清一些概念:spa
下面提供幾種方法供參考對象
在配置類中,咱們能夠經過@Bean指定initMethod 和destroyMethod ,分別指向類中的初始化和銷燬方法。blog
實現接口中的InitializingBean(定義初始化邏輯)和destroy(定義銷燬邏輯)方法便可。接口
在初始化和銷燬方法上分別添加@PostConstruct和@PreDestroy註解,這樣就能給Bean實現初始化和銷燬。it
這裏的兩個方法postProcessBeforeInitialization和postProcessAfterInitialization,分別會在初始化前和初始化後執行。io
BeanFactory在建立bean時,會先調用initializeBean方法進行初始化,並在初始化前獲取到全部後置處理器,並執行後置處理器的postProcessBeforeInitialization方法。容器
執行完全部後置處理器的postProcessBeforeInitialization方法後,接着BeanFactory將執行完初始化。配置
初始化完成後,繼續獲取全部的後置處理器,循環執行全部的postProcessAfterInitialization方法。循環
方法三的實現邏輯也是經過後置處理器來完成的。
在執行postProcessBeforeInitialization時,會掃描標註有@PostConstruct註解的方法的類,最終定位到對應方法並執行。