1. 程式人生 > >Spring Bean中初始化方法執行順序

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

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被例項化了也不會觸發

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

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

7 如果一個類被設定為懶載入,但是其他類注入該懶載入類,也會立刻例項化為Spring Bean.
解決辦法:可以在注入的地方也設定成懶載入