通俗易懂的spring bean的生命週期

  Spring中Bean的生命週期是一個困擾了我好久的問題,在網上找的各類五花八門的答案看的我是眼花繚亂,一頭霧水,外加一大堆看不懂的代碼更是搞的我雲裏霧裏,在通過了長久的概括總結思考,終於理清了這其中的邏輯。spring

  Spring Bean的生命週期其實能夠圍繞如下一段配置文件展開:框架

1 <bean id="student" class="com.wx.test.entity.Student">
2         <property name="name" value="小明"/>  
3         <property name="age" value="12"/> 
4 </bean>

  以上是一段很簡單的代碼,用來建立bean並注入相關屬性(姓名、年齡),這就是bean的生命週期的起始。固然這只是簡單的表現,Bean的生命週期實際上比這複雜,由於這其中涉及到不少接口須要去實現,這些接口咱們不多會關心,我總結出的bean的生命週期大體能夠分爲如下幾個步驟: post

  ① Spring IoC容器找到關於Bean的定義並實例化該Bean。 
  ② Spring IoC容器對Bean進行依賴注入。 
  ③ 若是Bean實現了BeanNameAware接口,則將該Bean的id傳給setBeanName方法。 
  ④ 若是Bean實現了BeanFactoryAware接口,則將BeanFactory對象傳給setBeanFactory方法。 
  ⑤ 若是Bean實現了BeanPostProcessor接口,則調用其postProcessBeforeInitialization方法。 
  ⑥ 若是Bean實現了InitializingBean接口,則調用其afterPropertySet方法。 
  ⑦ 若是有和Bean關聯的BeanPostProcessors對象,則這些對象的postProcessAfterInitialization方法被調用。 
  ⑧ 當一個bean再也不被調用時將從bean容器中移除。
  ⑨ 當銷燬Bean實例時,若是Bean實現了DisposableBean接口,則調用其destroy方法。

  若是你以爲以上還有有些複雜,那麼你能夠大概這樣理解:spa

  spring Bean的生命週期簡單易懂,首先初始化bean實例,其次spring ioc容器對bean進行依賴注入,而後實現一系列spring bean的接口,最後當一個bean再也不被調用時將從bean容器中移除,若是bean實現了DisposableBean接口,則調用其destory方法。

 

  最後補充一些內容,看不明白能夠不看:code

  

Spring bean factory 負責管理在 spring 容器中被建立的 bean 的生命週期。Bean 的生命週期由兩組回調(call back)方法組成。
    - 初始化以後調用的回調方法。
    - 銷燬以前調用的回調方法。

Spring 框架提供瞭如下四種方式來管理 bean 的生命週期事件:

- InitializingBean 和 DisposableBean 回調接口
- 針對特殊行爲的其餘 Aware 接口
- Bean 配置文件中的 Custom init() 方法和 destroy() 方法
- @PostConstruct 和 @PreDestroy 註解方式
相關文章
相關標籤/搜索