Bean懒加载

Bean懒加载

在默认的情况下,当我们启动Spring,不管我们有没有使用到Bean,Spring总是在创建完IOC容器后马上向IOC容器中添加我们定义的Bean

现在我们在添加Bean的时候打印一行文字来测试Bean加载的时机

@Configuration
public class MyConfiguration {

    @Bean
    public Person person() {
        System.out.println("加载Bean对象");
        return new Person(18, "wang");
    }

}

以下是测试用例,并没有从IOC容器中获取Bean,只打印一行文字来表示Spring容器启动

@SpringBootTest
class DemoApplicationTests {

    @Test
    void contextLoads() {
        System.out.println("启动Spring");
    }

}

测试结果如下,可以看到Spring会将Bean加载到容器中

在这里插入图片描述

有时候我们并不希望Spring加载所有的Bean,而是当我们需要用到Bean时,再加载Bean,即懒加载,Spring提供了一个注解@Lazy来支持这个功能,只需要将这个注解添加在需要懒加载的Bean上即可

@Configuration
public class MyConfiguration {

    @Bean
    @Lazy
    public Person person() {
        System.out.println("加载Bean对象");
        return new Person(18, "wang");
    }

}

再次测试,发现Spring不会加载这个Bean,因为我们没有从IOC容器中获取这个Bean

在这里插入图片描述

那什么时候Bean才会加载呢?当我们在Sping运行时第一次从IOC容器中获取这个Bean时,Sping才会加载这个Bean,这样做节约了系统开销

们在Sping运行时第一次从IOC容器中获取这个Bean时,Sping才会加载这个Bean,这样做节约了系统开销

需要注意的是,懒加载只针对单例的Bean才生效


版权声明:本文为blackball1998原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。