看到上面的這張圖可能大家就能很清晰的理解spring是如何初始化beans及管理benas的生命週期了,那下面就具體的說下這個整體流程。
傳統的java應用中,bean的生命週期很簡單。關鍵字new初始化bean然後待用,一旦這個bean不再使用則進入了垃圾回收階段進行處理。那麼
spring是如何管理?對比之下,bean的生命週期在spring容器的管理之中更加縝密(即分步驟更加明確)了。理解spring是如何管理bean的生命
週期是很重要的,因爲你可能想要利用spring給你提供的選擇來初始化你自己想要的(即帶有自己特色的)bean。上圖顯示了spring容器啓動並
加載bean之後的生命週期。
就像你看到的那樣,一個bean factory做了如下的幾步在bean可以使用之前。那麼我們就更詳細的分解下上圖。
1】spring實例化bean開始
2】spring爲bean的屬性注入值或者相應的引用
3】如果bean實現了BeanNameAware接口,spring將傳遞這個bean的id到setBeanName()的方法中
4】如果bean實現了BeanFactoryAware接口,spring將調用setBeanFactory()方法並傳遞bean factory本身進去
5】如果bean實現了ApplicationContextAware接口,spring將調用setApplicationContext()方法,並通過一個引用來關閉應用上下文。
6】如果任何一個bean實現了BeanPostProcessor接口,spring將調用postProcessBeforeInitialization()方法
7】如果任何的bean實現了InitializingBean接口,spring將調用afterPropertiesSet()方法。相似的,如果一個bean聲明init-method方法,那麼指定的方法將被調用
8】如果任何一個bean實現了BeanPostProcessor接口,spring將調用postProcessAfterInitialization()方法
9】到此,bean就可以使用了在應用中,並且保持在應用上下文中直到應用被銷燬。
10】如果任何bean實現了DisposableBean接口,spring將調用destroy()方法。同樣如果任何一個bean聲明瞭destroymethod()方法,指定的方法將被調用。
大概的流程就是這樣。其中需要實踐才能真正的理解。到此第一節結束。