天天看點

Spring bean的生命周期

正确了解Spring bean的生命周期非常重要,因為有的時候可能會利用Spring提供的擴充點來自定義bean的建立過程,同時Spring bean的生命周期也是面試時經常被提起的問題,是以寫篇文章總結一下。

先用一張圖來展示一下bean裝載到Spring應用上下文中的一個典型的生命周期過程:

1. Spring對bean進行執行個體化;

2. Spring将值和bean的引用注入到bean對應的屬性中;

3. 如果bean實作了BeanNameAware接口,Spring将bean的ID傳遞給setBeanName()方法;

4. 如果bean實作了BeanFactoryAware接口,Spring将調用setBeanFactory()方法,将BeanFactory容器執行個體傳入;

5. 如果bean實作了ApplicationContextAware接口,Spring将調用setApplicationContext()方法,将bean所在的應用上下文的引用傳入進來;

6. 如果bean實作了BeanPostProcessor接口,Spring将調用它們的postProcessorBeforeInitialization()方法;

7. 如果bean實作了InitializingBean接口,Spring将調用它們的afterPropertiesSet()方法。類似地,如果bean使用init-method聲明了初始化方法,該方法也會被調用;

8. 如果bean實作了BeanPostProcessor接口,Spring将調用它們的postProcessorAfterInitialization()方法;

9. 此時,bean已經準備就緒,可以被應用程式使用了,它們将一直駐留在應用上下文中,直到該應用上下文被銷毀;

10. 如果bean實作了DisposableBean接口,Spring将調用它們的destroy()方法。同樣,如果bean使用了destroy-method聲明了銷毀方法,該方法也會被調用。