懒加载:就是不希望容器启动就加载,我是用的时候再加载,那么容器启动就加载完成的应该就是只有单例的情况,所以懒加载是针对单实例bean,因为单实例默认容器启动的时候创建对象,懒加载通过容器启动时不创建对象,第一次使用(获取)bean才创建对象并初始化。
比较简单,咱们上代码:
package springanntition.lazy;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Lazy;
import springorgin.demo.configbean.Person;
public class MainLazyConfig {
/*
懒加载:
懒加载是针对单实例bean:因为单实例默认容器启动的时候创建对象。
容器启动的时候不创建对象,第一次使用(获取)Bean创建对象,并初始化。
**/
@Lazy
@Bean("person") // 默认都是单实例的
public Person person() {
System.out.println("给容器中添加person。。。。。");
return new Person("张三", 30);
}
}
测试类
package springanntition.lazy;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import springanntition.scope.MainScopeConfig;
public class LazyTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainLazyConfig.class);
System.out.println("IOC容器创建完成。。。。");
//Object bean = context.getBean("person");
}
}
运行一下
我们发现@Bean方法并没有打印数据,说明没有进方法,实现了懒加载
那什么时候能加载呢?更改一下测试类
public class LazyTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainLazyConfig.class);
System.out.println("IOC容器创建完成。。。。");
Object bean = context.getBean("person");
}
}
运行一下:
只有获取bean的时候才会创建对象,ok完成!