【Spring【IOC】】——5、@Lazy懒加载

在这里插入图片描述

作者简介:zhz小白
公众号:小白的Java进阶之路
专业技能:
1、Java基础,并精通多线程的开发,熟悉JVM原理
2、熟悉Java基础,并精通多线程的开发,熟悉JVM原理,具备⼀定的线上调优经验
3、熟悉MySQL数据库调优,索引原理等,⽇志原理等,并且有出过⼀篇专栏
4、了解计算机⽹络,对TCP协议,滑动窗⼝原理等有⼀定了解
5、熟悉Spring,Spring MVC,Mybatis,阅读过部分Spring源码
6、熟悉SpringCloud Alibaba体系,阅读过Nacos,Sentinel,Seata,Dubbo,Feign,Gateway核⼼源码与设计,⼆次开发能⼒
7、熟悉消息队列(Kafka,RocketMQ)的原理与设计
8、熟悉分库分表ShardingSphere,具有真实⽣产的数据迁移经验
9、熟悉分布式缓存中间件Redis,对其的核⼼数据结构,部署架构,⾼并发问题解决⽅案有⼀定的积累
10、熟悉常⽤设计模式,并运⽤于实践⼯作中
11、了解ElasticSearch,对其核⼼的原理有⼀定的了解
12、了解K8s,Jekins,GitLab
13、了解VUE,GO
14、⽬前有正在利⽤闲暇时间做互游游戏,开发、运维、运营、推销等

本人著作git项目:https://gitee.com/zhouzhz/star-jersey-platform,有兴趣的可以私聊博主一起编写,或者给颗star
领域:对支付(FMS,FUND,PAY),订单(OMS),出行行业等有相关的开发领域
如果此文还不错的话,还请关注、点赞、收藏三连支持一下博主~

什么是懒加载呢?

懒加载就是Spring容器启动的时候,先不创建对象,在第一次使用(获取)bean的时候再来创建对象,并进行一些初始化

非懒加载模式

首先第一步我们先在MainConfig中添加一个@Bean的一个Bean对象:

 @Bean(name = "person")
    public Person person() {
        System.out.println("单例bean创建");
        return new Person("zhz", 20);
    }

然后创建一个测试类,去扫描,读取该bean,看看他的加载顺序:

public void test() {
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
    }

运行结果:
【Spring【IOC】】——5、@Lazy懒加载_第1张图片

总结:我们可以发现正常情况下Bean是随着Spring容器加载的时候就创建了。

懒加载模式

首先我们还是搞一个Bean对象,不过这个bean对象跟上面非懒加载模式下的区别就是多了个@Lazy

@Lazy
@Bean(name = "person")
public Person person() {
    System.out.println("单例bean创建");
    return new Person("zhz", 20);
}

然后我们还是一样的测试类,如下测试方法1:

  @Test
    public void test() {
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);

演示效果:
【Spring【IOC】】——5、@Lazy懒加载_第2张图片

如下测试方法2:

@Test
    public void test() {
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
        Person person = applicationContext.getBean(Person.class);
        System.out.println(person);
    }

展示效果:
【Spring【IOC】】——5、@Lazy懒加载_第3张图片

总结:由上面两幅图,我们可以知道加了@Lazy之后,只有真正加载的时候才会创建。

总结

懒加载,也称延时加载,仅针对单实例bean生效。 单实例bean是在Spring容器启动的时候加载的,添加@Lazy注解后就会延迟加载,在Spring容器启动的时候并不会加载,而是在第一次使用此bean的时候才会加载,但当你多次获取bean的时候并不会重复加载,只是在第一次获取的时候才会加载,这不是延迟加载的特性,而是单实例bean的特性。

你可能感兴趣的:(#,Spring,spring,java,后端)