Spring Boot-延迟依赖注入_绅士jiejie的博客-CSDN博客_延迟依赖注入
有一个接口类Animal,如下:
public interface Animal { } 123
接口类Animal有一个实现类Cat,如下:
import org.springframework.stereotype.Service; @Service public class Cat implements Animal { public Cat() { System.out.println("延迟依赖注入"); } } 123456789
有一个测试依赖注入的类,注入了Animal,如下:
启动项目,运行结果如下: 会发现输出了【延迟依赖注入】,这说明在启动项目时,Cat类实例就已经完成了初始化,被注入到了Spring IoC容器中了。
那么怎么做懒加载,让Cat类一开始不要初始化和注入,使用时才构造实例和依赖注入,@ComponentScan注解有提供这么一个功能,这个注解的主要作用是扫描指定的包路径,找到需要被Ioc容器管理的类,它里面有个属性lazyInit,允许boolean值,默认为false,配合上这个属性,可以实现懒加载的逻辑。
给@ComponentScan注解加上lazyInit,值为true,如下: 然后给接口测试类加上相应的接口做懒加载测试,如下:
重启服务,启动日志如下: 没有再输出【延迟依赖注入】了。
接着浏览器调用接口,输出结果如下: 以上输出结果说明在真正要使用Cat实例时,Spring IoC才帮我我们完成初始化和依赖注入的工作,实现了初始化化和依赖注入的懒加载。
总结
至于为什么Spring IOC默认使用的是饿汉式加载,个人理解是把一些耗时的操作放在项目启动的时候,可以节省业务操作的时间,用户的体验会更好。