一個(gè)Bean從創(chuàng)建到銷(xiāo)毀式撼,如果是用BeanFactory來(lái)生成终抽,管理Bean的話纪他,會(huì)經(jīng)歷幾個(gè)執(zhí)行階段,也就是說(shuō)它的生命周期是怎樣的耻煤。首先我們來(lái)看一張圖:
在spring bean生命周期執(zhí)行的過(guò)程如下:
1)spring對(duì)bean進(jìn)行實(shí)例化具壮,默認(rèn)bean是單例
2)spring對(duì)bean進(jìn)行依賴(lài)注入
3)如果bean實(shí)現(xiàn)了BeanNameAware接口,spring將bean的id傳給setBeanName()方法
4)如果bean實(shí)現(xiàn)了BeanFactoryAware接口哈蝇,spring將調(diào)用setBeanFactory方法嘴办,將BeanFactory實(shí)例傳進(jìn)來(lái)
5)如果bean實(shí)現(xiàn)了ApplicationContextAware()接口,spring將調(diào)用setApplicationContext()方法將設(shè)置應(yīng)用上下文對(duì)象的引用
6) 如果bean實(shí)現(xiàn)了BeanPostProcessor接口买鸽,spring將調(diào)用它的postProcessBeforeInitialization接口方法
7) 如果bean實(shí)現(xiàn)了InitializingBean接口涧郊,spring將調(diào)用它們的afterPropertiesSet接口方法
8)如果bean使用了init-method屬性聲明了初始化方法,該方法會(huì)被調(diào)用
9)如果bean實(shí)現(xiàn)了BeanPostProcessor接口眼五,spring將調(diào)用它們的postProcessAfterInitialization接口方法
10)此時(shí)bean已經(jīng)準(zhǔn)備就緒妆艘,可以被應(yīng)用程序使用了彤灶,他們將一直駐留在應(yīng)用上下文中,直到該應(yīng)用上下文被銷(xiāo)毀
11)若bean實(shí)現(xiàn)了DisposableBean接口批旺,spring將調(diào)用它的distroy()接口方法
12)如果bean使用了destroy-method屬性聲明了銷(xiāo)毀方法幌陕,則該方法被調(diào)用