天天看點

Bean的生命周期和裝配方式

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();
	
	}
}
           

Bean的裝配方式