Spring延遲加載


如下內容引用自:http://www.cnblogs.com/wcyBlog/p/3756624.html

1、Spring中lazy-init詳解
ApplicationContext實現的默認行為就是在啟動服務器時將所有singleton bean提前進行實例化
(也就是依賴注入)。提前實例化意味着作為初始化過程的一部分,applicationContext實例會創
建並配置所有的singleton bean。通常情況下這是一件好事,因為這樣在配置中的任何錯誤就會
被立刻實現(否則的話可能要話幾個小時甚至幾天)。

<bean id="testBean" class="cn.itcast.test.TestBean" />該bean默認的設置為:
<bean id="testBean" calss="cn.itcast.test.TestBean" lazy-init="false" /> lazy-init="false"
立即加載,表示在spring啟動時,立刻進行實例化。

有時候這種默認處理可能並不是你想要的。如果你不想讓一個singleton bean在ApplicationContext
實現初始化時被提前實例化,那么可以將bean設置為延時實例化。

<bean id="testBean" calss="cn.itcast.test.TestBean" lazy-init="true" /> 延時加載,設置為lazy
的bean將不會在ApplicationContext啟動時提前被實例化,而是第一次向容器通過getBean索取bean時實例化的。

如果一個設置了立即加載的bean1,引用了一個延時加載的bean2,那么bean1在容器啟動時被實例化,而bean2
由於被bean1引用,所以也被實例化,這種情況也符合延時加載的bean在第一次調用時才被實例化的規則。

在容器層次中通過在<beans/>元素上使用'default-lazy-init'屬性來控制延時初始化也是可能的。如下面配置:
<beans default-lazy-init="true"><!-- no beans will be eagerly pre-instantiated... --></beans>

如果一個bean的scope屬性為scope="pototype"時,即使設置了lazy-init="false",容器啟動時不實例化bean,
而是調用getBean方法實例化的
另外說明:
  .init-method屬性指定初始化時執行的方法,distory-method屬性指定bean銷毀時執行的方法。

 

 

如下內容引用自:http://blog.csdn.net/lzj0470/article/details/17787165

一個設置為lazy-init屬性的bean,就意味要延遲加載,也就是IoC 容器將第一次被用到時才開始實例化。


bean的默認lazy-init=false,不需要延遲加載,IoC 容器將在服務器啟動的時候,會解讀ApplicationContext.xml文件,不管你是不是要使用該bean,都會先進行實例化。這會造成啟動的時候,特別的慢。但是,也是最保險的方法。


據說,在spring設置lazy-init=true的情況下,一個應用可以從 55 秒下降到 8 秒!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM