Spring Bean中初始化方法執行順序

2021-09-04 10:17:52 字數 824 閱讀 4780

1 當@scope為singleton時,bean會在ioc初始化時就被例項化,預設為singleton,可以配合@lazy實現延時載入

2 當@scope為prototype時,bean在ioc初始化時不會被例項化,只有在使用時,或者手動context.getbean()時才會被例項化

3 執行順序 constructor > @postconstruct > initializingbean > init-method > smartinitializingsingleton

4 實現smartinitializingsingleton介面的類,只有當被spring例項化為乙個單例bean,在所有的bean載入完成後,才會被呼叫 如果該類被設定為懶載入,那麼smartinitializingsingleton介面方法永遠不會被觸發,即使使用時bean被例項化了也不會觸發.原因見:

org.springframework.beans.factory.support.defaultlistablebeanfactory的public void preinstantiatesingletons()方法

5 其他的初始化方式不管是否懶載入,在物件被建立後都會被呼叫

6 如果是通過成員變數注入依賴的物件,而不是通過建構函式注入,那麼在呼叫構造方法時,成員變數是沒有被注入的,這也可以理解,因為只有有了物件之後才能通過**對成員變數操作.(切記不是物件初始化,物件初始化之前是先初始化成員變數,不過這也是相對講的,實際上例項化過程不僅僅這麼簡單)

7 如果乙個類被設定為懶載入,但是其他類注入該懶載入類,也會立刻例項化為spring bean.

解決辦法:可以在注入的地方也設定成懶載入

Spring Bean初始化過程

從該繼承體系可以看出 2.abstractbeanfactory 和 abstractautowirecapablebeanfactory 是兩個模 板抽象工廠類。abstractbeanfactory 提供了 bean 工廠的抽象基類,同時提供 了 configurablebeanfactory ...

spring bean的初始化與銷毀

spring bean的初始與銷毀 這裡只介紹bean的初始與銷毀時呼叫的方法 不配置就不呼叫 這是要測試的bean public class testbean public void destroy 1.初始化的兩種方式 1 實現initializingbean介面的 public class b...

Spring bean初始化方法的幾種寫法

專案路徑 下的spring 06,工程截圖 1.指明initmethod和destroymethod,新建stu類,public class stu public void mydestroy 把stu注入當容器中,並增加初始化myinit和銷毀方法mydestroy configuration c...