傳統的java應用,bean的生命週期很簡單。使用java關鍵字new進行bean實例化,而後該bean就能夠被使用了。一旦
該bean再也不被使用,則由java自動進行垃圾回收。
相比之下,Spring容器中的Bean的生命週期就顯得相對細膩多了。正確理解Spring Bean的生命週期很是重要,由於你
或者要利用Sping提供的擴展點點自定義Bean的建立過程。java
生命週期:
一、Spring對Bean進行實例化
二、Sping將值和Bean的應用注入進Bean對應的屬性中
三、若是Bean實現了BeanNameAware接口,Spring將Bean的Id傳遞給setBeanName()接口方法
四、若是Bean實現了BeanFactoryAware接口,Spring將調用setBeanFactory()接口方法,將BeanFactory容器實例傳入
五、若是Bean實現了ApplicationContextAware接口,Spring將調用setApplicationContext()接口方法,將應用上文的應用傳入
六、若是Bean實現了BeanPostProcessor接口,Spring將調用他們的postProcessBeforeInitiazation()接口方法
七、若是Bean實現了InitialiingBean接口,Spring將調用他們的afterPropertiesSet()接口方法。相似的,若是Bean使用init_method聲明瞭初始化方法,該方法也會被調用
八、若是Bean實現了BeanPostProcessor接口,Spring將調用他們的PostPoressAfterInitialization()方法
九、此時此刻,Bean已經準備就緒,能夠被應用程序使用了,他們將一直駐留在應用上下文中,指導該應用上下文被銷燬。
十、若是Bean實現了DisposableBean接口,Spring將調用它的destroy()接口方法。一樣,若是Bean使用destroy-method聲明瞭銷燬方法,該方法也會被調用post