天天看點

spring中bean的生命周期

我們前面已經知道,bean元件如果是單例的,那麼在建立IOC容器完成時就已經建立和初始化了,如果是多執行個體,那麼在使用時才建立,那麼什麼時候關閉呢?

通過檢視繼承樹,發現在ConfigurableApplicationContext接口中存在close方法。

接下來我們自定義bean的生命周期看看,是不是這麼一個過程。

我們可以看到,每一個bean都有一個初始化的方法和銷毀的方法。

接下來我們進行測試

我們不知道什麼時候銷毀的bean,程式就已經結束了。打開注解

執行了destroy方法,容器一關閉,bean就會被銷毀。上面的是單例的bean元件,那原型bean也是這樣的生命周期嗎?

試試

發現,就算調用了close()方法,IOC容器關閉,bean也沒有被銷毀,其實隻要原型bean本身不持有對另一個資源的引用,删除了對該對象的所有引用或對象超出範圍,就會被當成垃圾進行回收。是以,通常沒有必要顯式銷毀原型bean。

注意,無論bean有無初始化方法,後置處理器都會工作

BeanPostProcessor簡稱bean的後置處理器,分為在初始化之前和初始化之後。

也就是在bean初始化之前執行的操作和初始化之後執行的操作,這裡就有一個問題,屬性的注入是發生在什麼時候,我結合之前的類的裝載流程,判斷是發生在初始化之後。但是結合實際操作,我是錯的,哈哈哈

我發現屬性的注入是發生在初始化之前的。