Spring bean的生命週期很是重要,由於有的時候可能會利用Spring提供的擴展點來自定義bean的建立過程,同時Spring bean的生命週期也是面試時常常被提起的問題,因此寫篇文章總結一下。面試
先用一張圖來展現一下bean裝載到Spring應用上下文中的一個典型的生命週期過程:post
1. Spring對bean進行實例化;.net
2. Spring將值和bean的引用注入到bean對應的屬性中;blog
3. 若是bean實現了BeanNameAware接口,Spring將bean的ID傳遞給setBeanName()方法;接口
4. 若是bean實現了BeanFactoryAware接口,Spring將調用setBeanFactory()方法,將BeanFactory容器實例傳入;生命週期
5. 若是bean實現了ApplicationContextAware接口,Spring將調用setApplicationContext()方法,將bean所在的應用上下文的引用傳入進來;it
6. 若是bean實現了BeanPostProcessor接口,Spring將調用它們的postProcessorBeforeInitialization()方法;io
7. 若是bean實現了InitializingBean接口,Spring將調用它們的afterPropertiesSet()方法。相似地,若是bean使用init-method聲明瞭初始化方法,該方法也會被調用;容器
8. 若是bean實現了BeanPostProcessor接口,Spring將調用它們的postProcessorAfterInitialization()方法;擴展
9. 此時,bean已經準備就緒,能夠被應用程序使用了,它們將一直駐留在應用上下文中,直到該應用上下文被銷燬;
10. 若是bean實現了DisposableBean接口,Spring將調用它們的destroy()方法。一樣,若是bean使用了destroy-method聲明瞭銷燬方法,該方法也會被調用。原文:https://blog.csdn.net/hyxhbj1/article/details/80952946