1.bean的生命周期
我們平常經常使用類似于new Object()的方式去創建對象,在這個對象沒有任何引用的時候,會被gc給回收掉。而對于spring而言,它本身存在一個Ioc容器,就是用來管理對象的,而對象的生命周期也完全由這個容器所控制。Spring 中每個 Bean 的生命周期如下:
2.主要步驟簡述
- 實例化 Bean:通過反射調用構造方法實例化對象。
- 依賴注入:裝配 Bean 的屬性。
- 實現了 Aware接口的 Bean,執行接口方法(如創建bean的名稱等等):如順序執行 BeanNameAware、BeanFactoryAware、ApplicationContextAware的接口方法。
- Bean 對象初始化前,循環調用實現了 BeanPostProcessor 接口的預初始化方法(postProcessBeforeInitialization)。
- Bean 對象初始化:順序執行 @PostConstruct 注解方法、InitializingBean 接口方法、init-method 方法。
- Bean 對象初始化后,循環調用實現了 BeanPostProcessor 接口的后初始化方法(postProcessAfterInitialization)。
- 容器關閉時,執行 Bean 對象的銷毀方法,順序是:@PreDestroy 注解方法、DisposableBean 接口方法、destroy-method。
3.一句話概述
spring bean的生命周期主要會經過3個關鍵步驟,即實例化對象、給對象進行屬性注入、對象初始化,只不過在進行對象初始化之前或之后有可能會進行一些自定義的處理,比如對象實現了BeanNameWare接口,可以用來設置bean對象的名稱,也比如對象實現了
BeanPostProcessor接口,就可以增加一些自定義的邏輯在該接口的兩個方法中。當然對象初始化完成后,最后還可以增加對象的銷毀方法,讓對象在銷毀時進行一些自定義的操作。