天天看點

02-Spring架構中Bean的生命周期

簡單說一下:

1、執行個體化一個Bean--也就是我們常說的new;

2、按照Spring上下文對執行個體化的Bean進行配置--也就是IOC注入;

3、如果這個Bean已經實作了BeanNameAware接口,會調用它實作的setBeanName(String)方法,此處傳遞的就是Spring配置檔案中Bean的id值

4、如果這個Bean已經實作了BeanFactoryAware接口,會調用它實作的setBeanFactory(setBeanFactory(BeanFactory)傳遞的是Spring工廠自身(可以用這個方式來擷取其它Bean,隻需在Spring配置檔案中配置一個普通的Bean就可以);

5、如果這個Bean已經實作了ApplicationContextAware接口,會調用setApplicationContext(ApplicationContext)方法,傳入Spring上下文(同樣這個方式也可以實作步驟4的内容,但比4更好,因為ApplicationContext是BeanFactory的子接口,有更多的實作方法);

6、如果這個Bean關聯了BeanPostProcessor接口,将會調用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor經常被用作是Bean内容的更改,并且由于這個是在Bean初始化結束時調用那個的方法,也可以被應用于記憶體或緩存技術;

7、如果Bean在Spring配置檔案中配置了init-method屬性會自動調用其配置的初始化方法。

8、如果這個Bean關聯了BeanPostProcessor接口,将會調用postProcessAfterInitialization(Object obj, String s)方法、

注:以上工作完成以後就可以應用這個Bean了,那這個Bean是一個Singleton的,是以一般情況下我們調用同一個id的Bean會是在内容位址相同的執行個體,當然在Spring配置檔案中也可以配置非Singleton,這裡我們不做贅述。      

9、當Bean不再需要時,會經過清理階段,如果Bean實作了DisposableBean這個接口,會調用那個其實作的destroy()方法;

10、最後,如果這個Bean的Spring配置中配置了destroy-method屬性,會自動調用其配置的銷毀方法。

02-Spring架構中Bean的生命周期