我們前面已經知道,bean元件如果是單例的,那麼在建立IOC容器完成時就已經建立和初始化了,如果是多執行個體,那麼在使用時才建立,那麼什麼時候關閉呢?
通過檢視繼承樹,發現在ConfigurableApplicationContext接口中存在close方法。
接下來我們自定義bean的生命周期看看,是不是這麼一個過程。
我們可以看到,每一個bean都有一個初始化的方法和銷毀的方法。
接下來我們進行測試
我們不知道什麼時候銷毀的bean,程式就已經結束了。打開注解
執行了destroy方法,容器一關閉,bean就會被銷毀。上面的是單例的bean元件,那原型bean也是這樣的生命周期嗎?
試試
發現,就算調用了close()方法,IOC容器關閉,bean也沒有被銷毀,其實隻要原型bean本身不持有對另一個資源的引用,删除了對該對象的所有引用或對象超出範圍,就會被當成垃圾進行回收。是以,通常沒有必要顯式銷毀原型bean。
注意,無論bean有無初始化方法,後置處理器都會工作
BeanPostProcessor簡稱bean的後置處理器,分為在初始化之前和初始化之後。
也就是在bean初始化之前執行的操作和初始化之後執行的操作,這裡就有一個問題,屬性的注入是發生在什麼時候,我結合之前的類的裝載流程,判斷是發生在初始化之後。但是結合實際操作,我是錯的,哈哈哈
我發現屬性的注入是發生在初始化之前的。