天天看點

spring應用手冊-IOC(XML配置實作)-(9)-bean标簽中的lazy-init屬性

戴着假發的程式員出品

bean标簽中的lazy-init屬性

看文字嫌累的可以檢視後面的視訊說明

lazy-init屬性用于配置目前的springbean是否延遲加載。所謂延遲加載就是建立spring容器的時候是不建立對象的,當第一次擷取該對象時才會執行個體化該對象。

lazy-init屬性的預設值是false,也就是不延遲加載。 當修改為true時就會延遲加載。

spring應用手冊-IOC(XML配置實作)-(9)-bean标簽中的lazy-init屬性

當然我們也可以在beans标簽中使用default-lazy-init指定目前配置檔案中配置的所有bean全部延遲加載或者不延遲加載。

spring應用手冊-IOC(XML配置實作)-(9)-bean标簽中的lazy-init屬性

我們可以在AccountService的構造方法中添加輸出語句:

/**
 * @author 戴着假發的程式員
 * @description
 */
public class AccountService {
    public AccountService(){
        System.out.println("建立AccountService對象");
    }
    private AccountDAO accountDAO;
    public void setAccountDAO(AccountDAO accountDAO) {
        this.accountDAO = accountDAO;
    }
    public int save(String name){
        System.out.println("AccountService-save->儲存使用者:"+name);
        return accountDAO.save(name);
    }
}
           

修改我們的測試程式:

@Test
    public void testSpringLazyInit(){
        //建立spring容器
        ApplicationContext ac =
                new ClassPathXmlApplicationContext("applicationContext.xml");
        System.out.println("容器建立完成");
        AccountService accountService = ac.getBean(AccountService.class);
        AccountService accountService2 = ac.getBean(AccountService.class);
        accountService.save("戴着假發的程式員");
    }
           

測試結果:

spring應用手冊-IOC(XML配置實作)-(9)-bean标簽中的lazy-init屬性

我們會發現在沒有擷取accountService對象之前,容器已經初始化,但是并沒有執行個體化accountService對象,當我們要使用accountService對象時才會執行個體化。

如果lazy-init是false,則在初始化容器的同時就會執行個體化accountService對象。

lazy-init 視訊講解

spring應用手冊(第一部分)