第二章 IoC Bean的初始化與延遲載入
阿新 • • 發佈:2019-02-18
在預設情況下,Spring的ApplicationContext容器在啟動的時候,會自動例項化所有singleton的Bean並快取在容器中。雖然啟動時會花費一些時間,但帶來兩個好處:
1、對Bean提前例項化操作會及早發現一些潛在的配置問題;
2、Bean以快取的方式儲存,當執行期使用到該Bean的時候無需再例項化,加快執行的效率。
如果使用者不希望容器啟動的時候提前例項化singleton的Bean,可以通過lazy-init屬性進行控制:
<bean id="userDao" class="cn.framelife.spring.dao.impl.UserDaoImpl" scope="singleton" lazy-init="true"></bean>
也可以在beans標籤中使用default-lazy-init對所有的singleton的Bean進行延遲載入:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" default-lazy-init="true">
被設定為延遲載入的Bean在某些情況下依舊會提前例項化:如果這個Bean被其它需要提前例項化的Bean引用到,那麼Spring也將忽略延遲載入設定。
一般我們不做延遲載入。