在ApplicationContext
容器中,當容器一啟動時,所有的bean(單例的)都會被創建和注入依賴,這也被視為IOC容器啟動過程中的一個步驟。
那如何讓一個bean在需要的時候再被創建,而不是容器一加載的時候呢?
在配置文件的bean
標簽中,將lazy-init
屬性設置為true
<bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazy-init="true"/>
<bean name="not.lazy" class="com.foo.AnotherBean"/>
這樣,當applicationContext容器啟動時,該Bean不會初始化,而是當需要使用這個類的時候才會創建實例
還有另外一種情況,就是這個被懶加載的Bean,它被不是一個懶加載的bean所依賴,那么在容器啟動時,即使它是懶加載 的,也會被實例化。
全局懶加載
<beans default-lazy-init="true">
<!-- no beans will be pre-instantiated... -->
</beans>
在beans
標簽中配置default-lazy-init="true"
屬性即可。