Bean的生命周期如下圖所示:

從上圖,我們可以看出bean的生命周期需要經(jīng)歷如上的階段:
(1)Spring對(duì)Bean進(jìn)行實(shí)例化。
(2)Spring將值和bean的引用注入到bean對(duì)應(yīng)的屬性中。
(3)如果bean實(shí)現(xiàn)了BeanNameAware接口,則將bean的id傳遞給setBeanName方法
(4)如果bean實(shí)現(xiàn)了BeanFactoryAware接口,則將調(diào)用setBeanFactory方法,將BeanFactroy容器實(shí)例傳入
(5)如果bean實(shí)現(xiàn)了ApplicationContextAware接口,spring將調(diào)用setApplicationContext方法,將bean所在應(yīng)用上下文的引用傳遞進(jìn)來(lái)
(6)如果bean實(shí)現(xiàn)了InitializingBean接口,spring將調(diào)用他們的afterPropertiesSet方法。
(7)如果實(shí)現(xiàn)了BeanPostProcessor接口,Spring將調(diào)用他們的postProcessBeforeInitialization方法
(8)如果bean實(shí)現(xiàn)了BeanPostProcessor接口,spring將調(diào)用他們的postProcessAfterInitialization方法
(9)此時(shí),bean準(zhǔn)備就緒,就可以被引用程序使用,一直駐留在應(yīng)用上下文中,直到該應(yīng)用上下文被銷毀。
(10)如果bean實(shí)現(xiàn)了DisposableBean接口,spring將調(diào)用它的destroy接口。