1.9 bean标签中的lazy-init属性
戴着假发的程序员 出品
[查看视频讲解]
lazy-init属性用于配置当前的springbean是否延迟加载。所谓延迟加载就是创建spring容器的时候是不创建对象的,当第一次获取该对象时才会实例化该对象。
lazy-init属性的默认值是false,也就是不延迟加载。 当修改为true时就会延迟加载。
当然我们也可以在beans标签中使用default-lazy-init指定当前配置文件中配置的所有bean全部延迟加载或者不延迟加载。
我们可以在AccountService的构造方法中添加输出语句:
1 /** 2 * @author 戴着假发的程序员 3 * @description 4 */ 5 public class AccountService { 6 public AccountService(){ 7 System.out.println("创建AccountService对象"); 8 } 9 private AccountDAO accountDAO; 10 public void setAccountDAO(AccountDAO accountDAO) { 11 this.accountDAO = accountDAO; 12 } 13 public int save(String name){ 14 System.out.println("AccountService-save->保存用户:"+name); 15 return accountDAO.save(name); 16 } 17 }
修改我们的测试程序:
1 @Test 2 public void testSpringLazyInit(){ 3 //创建spring容器 4 ApplicationContext ac = 5 new ClassPathXmlApplicationContext("applicationContext.xml"); 6 System.out.println("容器创建完成"); 7 AccountService accountService = ac.getBean(AccountService.class); 8 AccountService accountService2 = ac.getBean(AccountService.class); 9 accountService.save("戴着假发的程序员"); 10 }
测试结果:
我们会发现在没有获取accountService对象之前,容器已经初始化,但是并没有实例化accountService对象,当我们要使用accountService对象时才会实例化。
如果lazy-init是false,则在初始化容器的同时就会实例化accountService对象。
我是戴着假发的程序员,分享技术,分享经验,如果要转载,请注明:出自戴着假发的程序员