項目路徑: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.如果在配置檔案中定義了自己的初始化方法
,則會執行該方法
9.如果實作了DisposableBean接口,則關閉容器時會自動調用接口的destroy方法
10.如果在配置檔案中定義了自己的銷毀方法,
則關閉容器時會調用該方法
流程的執行結果
以上是通過ApplicationContext方式擷取到的bean的生命周期
而通過BeanFactory擷取到的bean對象,bean的聲明周期相對會少一些
列印結果
少了ApplicationContext裡面的第5和第6步,是以兩者是不一樣的。
bean的生命周期開始的時間:被載入容器中的時候,第一個過程就是執行個體化
bean一般在什麼時候執行個體化:程式加載配置檔案的時候,把bean加載到記憶體中,可以證明bean在這個時候執行個體化的,預設會調用無參的構造函數