Bean的生命周期
一個對象的生命周期包括建立(執行個體化,初始化)、使用、銷毀等階段,Bean的生命周期也如此。在Spring Bean中,對Bean的執行個體化就是為對象的建立開辟空間,對Bean的初始化就是對屬性的初始化。
Spring在管理singleton作用域下的Bean能夠跟蹤Bean被建立,被使用,被銷毀。Spring管理在Prototype作用域下的Bean,當容器建立了Bean的執行個體後,就交給了用戶端的代碼管理Bean,不再跟蹤其生命周期。
Bean的生命周期過程
(1)根據Bean配置檔案建立一個Bean。
(2)根據Spring上下文對Bean進行依賴注入,也就是對Bean進行初始化。
(3)如果Bean實作了BeanNameAware接口,将調用它實作的setBeanName(String beanId)方法,此處參數傳遞的是Spring配置檔案中的Bean的id。
(4)如果Bean實作了BeanFactory接口,将調用初始化方法setFactory方法,此處參數傳遞的是目前工廠執行個體的引用。
(5)如果Bean實作了ApplicationContextAware接口,将調用初始化方法setApplictionContext(ApplicationContext)方法,此處傳遞的參數時Spring上下文執行個體的引用。
(6)如果Bean關聯了BeanPostProcessor接口,将調用初始化方法postProcessorBeforeInitialization(Object obj,String s)對Bean操作。
(7)如果Bean實作了InitiazingBean接口,将調用afterPropertiesSet方法。
(8)如果Bean在Spring配置檔案中配置了init-mehod屬性。将自動調用其配置的初始化方法。
(9)如果Bean關聯了BeanPostProcessor接口,将調用postProcessAfterInitialization(Object obj,Stirng s)方法,由于是在Bean進行初始化結束時調用After方法,也可用于記憶體或緩存技術。
(10)當Bean不再需要時進入銷毀階段。如果Bean實作了DisposableBean接口,則調用其實作destory方法将Spring中的Bean銷毀。
(11)如果配置檔案中通過destory-mehod屬性指定了Bean的銷毀方法,将調用其配置的銷毀方法進行銷毀。
Bean的生命周期示範
1.建立Bean實作類
在BeanLife中實作Bean的初始化和銷毀。
package life;
public class BeanLife{
public void initMyself(){
System.out.println(this.getClass().getName()+"Bean的初始化方法");
}
public void destoryMyself(){
System.out.println(this.getClass().getName()"Bean的銷毀方法");
}
}
2.配置Bean
3.測試生命周期
package test;
public void Test{
public static void main(String[] args){
//初始化容器,加載配置檔案
ClassPathApplicationContext context = new ClassPathApplicationContext("applicationContext.xml");
BeanLife blife = (BeanLife)context.getBean("beanLife");
context.close();
}
}