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...