Spring bean的生命流程

Spring 是一個輕量級的 J2EE 開源框架,其目標是下降企業級應用開發難度,提升企業級應用開發效率。在日程開發中,咱們會常用 Spring 框架去構建應用。因此做爲一個常用的框架,瞭解其原理仍是頗有必要的。接下來咱們就從宏觀層面上,來看看 Spring 中的 bean 由實例化到銷燬的過程。在詳細討論 bean 生命週期前,先上一張圖,後面也會圍繞這張圖展開討論。框架

bean實例化過程

圖1 bean實例化過程post

接下來對照上圖,一步一步對 singleton 類型 bean 的生命週期進行解析:對象

  1. 實例化 bean 對象,相似於 new XXObject()blog

  2. 將配置文件中配置的屬性填充到剛剛建立的 bean 對象中。接口

  3. 檢查 bean 對象是否實現了 Aware 一類的接口,若是實現了則把相應的依賴設置到 bean 對象中。好比若是 bean 實現了 BeanFactoryAware 接口,Spring 容器在實例化bean的過程當中,會將 BeanFactory 容器注入到 bean 中。生命週期

  4. 調用 BeanPostProcessor 前置處理方法,即 postProcessBeforeInitialization(Object bean, String beanName)。開發

  5. 檢查 bean 對象是否實現了 InitializingBean 接口,若是實現,則調用 afterPropertiesSet 方法。或者檢查配置文件中是否配置了 init-method 屬性,若是配置了,則去調用 init-method 屬性配置的方法。get

  6. 調用 BeanPostProcessor 後置處理方法,即 postProcessAfterInitialization(Object bean, String beanName)。咱們所熟知的 AOP 就是在這裏將 Adivce 邏輯織入到 bean 中的。it

  7. 註冊 Destruction 相關回調方法。io

  8. bean 對象處於就緒狀態,能夠使用了。

  9. 應用上下文被銷燬,調用註冊的 Destruction 相關方法。若是 bean 實現了 DispostbleBean 接口,Spring 容器會調用 destroy 方法。若是在配置文件中配置了 destroy 屬性,Spring 容器則會調用 destroy 屬性對應的方法。

上述流程從宏觀上對 Spring 中 singleton 類型 bean 的生命週期進行了描述,接下來講說所上面流程中的一些細節問題。

轉載:

http://www.tianxiaobo.com/2018/01/19/Spring-bean%E7%9A%84%E7%94%9F%E5%91%BD%E6%B5%81%E7%A8%8B/

相關文章
相關標籤/搜索