Spring Boot-延迟依赖注入

有一个接口类Animal,如下:

public interface Animal {
 
}

接口类Animal有一个实现类Cat,如下:

import org.springframework.stereotype.Service;

@Service
public class Cat implements Animal {
    
    public Cat() {
        System.out.println("延迟依赖注入");
    }
}

有一个测试依赖注入的类,注入了Animal,如下:
在这里插入图片描述

启动项目,运行结果如下:
在这里插入图片描述
会发现输出了【延迟依赖注入】,这说明在启动项目时,Cat类实例就已经完成了初始化,被注入到了Spring IoC容器中了。

那么怎么做懒加载,让Cat类一开始不要初始化和注入,使用时才构造实例和依赖注入,@ComponentScan注解有提供这么一个功能,这个注解的主要作用是扫描指定的包路径,找到需要被Ioc容器管理的类,它里面有个属性lazyInit,允许boolean值,默认为false,配合上这个属性,可以实现懒加载的逻辑。

给@ComponentScan注解加上lazyInit,值为true,如下:
在这里插入图片描述
然后给接口测试类加上相应的接口做懒加载测试,如下:
在这里插入图片描述

重启服务,启动日志如下:
在这里插入图片描述
没有再输出【延迟依赖注入】了。

接着浏览器调用接口,输出结果如下:
在这里插入图片描述
以上输出结果说明在真正要使用Cat实例时,Spring IoC才帮我我们完成初始化和依赖注入的工作,实现了初始化化和依赖注入的懒加载。

总结

至于为什么Spring IOC默认使用的是饿汉式加载,个人理解是把一些耗时的操作放在项目启动的时候,可以节省业务操作的时间,用户的体验会更好。

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/107850813