天天看點

Spring bean的生命周期總結

項目路徑:https://gitee.com/wuhan1/spring-parent.git 下的spring-09

bean的行為模式分兩種:

單例模式:由ioc容器負責,隻建立一次,可以設定延遲加載,預設就是單例模式

非單例模式:spring ioc容器不負責此種模式的生命周期,隻負責建立初始化,每次使用時都會建立新的

xml方式加載

bean生命周期最簡單的一種情況:

執行個體化——》設定屬性——》使用

複雜的情況(實際可能隻會用到其中的幾步):

1.執行個體化

2.設定屬性

3.如果實作了BeanNameAware接口(bean名字關注接口),則可以擷取正在執行個體化的bean的名字(bean id)

4.如果實作了BeanFactoryAware接口(bean 工廠關注接口),則可以擷取bean工廠

5.如果實作了ApplicationContextAware接口,可以擷取上下文對象

6.如果bean和後置處理器關聯,則會自動調用postProcessBeforeInitialization和postProcessAfterInitialization的方法

7.如果實作了InitializingBean接口,則會調用afterPropertiesSet方法

8.如果在配置檔案中定義了自己的初始化方法

Spring bean的生命周期總結

,則會執行該方法

9.如果實作了DisposableBean接口,則關閉容器時會自動調用接口的destroy方法

10.如果在配置檔案中定義了自己的銷毀方法,

Spring bean的生命周期總結

則關閉容器時會調用該方法

Spring bean的生命周期總結

流程的執行結果

Spring bean的生命周期總結

以上是通過ApplicationContext方式擷取到的bean的生命周期

Spring bean的生命周期總結

而通過BeanFactory擷取到的bean對象,bean的聲明周期相對會少一些

Spring bean的生命周期總結

列印結果

Spring bean的生命周期總結

少了ApplicationContext裡面的第5和第6步,是以兩者是不一樣的。

bean的生命周期開始的時間:被載入容器中的時候,第一個過程就是執行個體化

bean一般在什麼時候執行個體化:程式加載配置檔案的時候,把bean加載到記憶體中,可以證明bean在這個時候執行個體化的,預設會調用無參的構造函數