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对象。

posted @ 2020-10-03 20:16  戴着假发的程序员0-1  阅读(383)  评论(0编辑  收藏  举报