Spring中xml标签lazy-init使用


1. 引言

bean的初始化有两种方式

  • 实时初始化。Spring容器启用以后,即刻初始化
  • 延迟初始化。代码中调用的时候,才会创建

Spring默认情况下,所有的bean都会被实时初始化。但是大量的bean实时初始化,会导致启动变慢。因此对于需要延迟初始化的bean,可以通过xml进行设置。

2. 延迟创建bean

修改springid.xml,如下



    
        
        
    

    
        
        
    

    
        
        
    


修改LiwlTest.java

package com.liwl.dev;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class LiwlTest {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("springdi.xml");
        SchoolImpl school = (SchoolImpl) context.getBean("school");
        System.out.println("school:"+school);
        context.close();
    }
}

运行结果

调用SchoolImpl bean 无参构造方法
school:[SchoolImpl bean],name:jiangnan,address:江苏省无锡市滨湖区蠡湖大道1800号
SchoolImpl bean 销毁

从结果看出,并没有创建LiwanLiangImpl的bean,说明是被延迟创建的

3. 依赖注入情况下的bean

修改springdi.xml



    
        
        
    

    
        
        
    

    
        
        
    


运行结果

调用SchoolImpl bean 无参构造方法
调用CompanyImpl bean 无参构造方法
调用LiwanLiangImpl bean 无参构造方法
school:[SchoolImpl bean],name:jiangnan,address:江苏省无锡市滨湖区蠡湖大道1800号
LiwanLiangImpl bean 销毁
CompanyImpl bean 销毁
SchoolImpl bean 销毁

说明此种情况,即便是被依赖的bean,school和company标注了lasy-init,也还是因为被实时创建的beanliwanliang依赖而实时创建