延遲初始化 beans

 在默認情況下,ApplicationContext在初始化過程中可以輕易創建並配置所有的singleton beans。這些 pre-instantiation都很令人滿意,因爲這樣子很容易發現配置或者是環境的錯誤,
而不是幾個小時甚至幾天後才發現這些錯誤。當這些行爲不適合我們的時候,我們可以通過定義bean爲延遲初始化阻止 singleton bean 的 pre-instantiated 。一個延遲加載的bean會告訴Ioc容器,第一次使用它的時候創建bean,而不是在啓動的時候創建。
    
    在XML文件中,這些行爲是通過 <bean/>節點裏面的 lazy-init屬性控制;例如:
<bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazy-init="true"/>
<bean name="not.lazy" class="com.foo.AnotherBean"/>

    ApplicationContext 消耗完之前的配置,當 ApplicationContext  啓動時不會馬上 pre-instantiated 那些定義爲 lazy 的 bean,相反,ApplicationContext  啓動時會馬上 pre-instantiated 那些定義爲 not.lazy 的 bean。
     然而,如果一個延遲加載的 bean 是另一個 singleton bean 的依賴,這個 bean 就不會延遲加載,ApplicationContext 會在啓動的時候創建這個 bean。因爲這個bean必須滿足 singleton bean 的依賴性。延遲加載的 bean注入到一個 singleton bean 在其他地方不會延遲加載。

      你也可以通過使用<beans/>節點裏面的default-lazy-init變量在容器水平上控制延遲加載。例如:
<beans default-lazy-init="true">
<!-- no beans will be pre-instantiated... -->
</beans>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章