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依赖而实时创建