戴着假發的程式員出品
bean标簽中的lazy-init屬性
看文字嫌累的可以檢視後面的視訊說明
lazy-init屬性用于配置目前的springbean是否延遲加載。所謂延遲加載就是建立spring容器的時候是不建立對象的,當第一次擷取該對象時才會執行個體化該對象。
lazy-init屬性的預設值是false,也就是不延遲加載。 當修改為true時就會延遲加載。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNyZuBnL1gjMzETOzMTMyADMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
當然我們也可以在beans标簽中使用default-lazy-init指定目前配置檔案中配置的所有bean全部延遲加載或者不延遲加載。
我們可以在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("戴着假發的程式員");
}
測試結果:
我們會發現在沒有擷取accountService對象之前,容器已經初始化,但是并沒有執行個體化accountService對象,當我們要使用accountService對象時才會執行個體化。
如果lazy-init是false,則在初始化容器的同時就會執行個體化accountService對象。
lazy-init 視訊講解
spring應用手冊(第一部分)