一、什么是循环依赖
spring框架如何解决循环依赖,我们就得先知道什么是循环依赖
根据这个名字,大家可以看出来,就是循环和依赖,其实和我们调用方法中的死循环很像,它发生在spring上下文加载所有的Bean时,一个类A依赖于另一个类B,而类B又依赖于类A:
Bean A →Bean B→Bean A.....
演示如下:
有两个相互依赖的类A,B
配置类,指定要扫描的包:
最后就是测试,junit来测试
如果运行,并且两个类之间相互依赖,则会报错,如下:
二、如何解决循环依赖
1.最有效、最直接的办法就是重新设计,将组件的结构设计的更明确,避免循环依赖
2.使用set注入:
只有构造方法是在上下文加载时就要求被注入,容易出现循环依赖,所以我们可以使用其他注入方式进行依赖注入,set注入与构造注入不同,set注入是在被需要的时候才会注入。
3.使用@Lazy
对循环依赖的两个类使用@Lazy,通过延迟加载的方式防止循环依赖,也就是它没有完全的初始化,而是创建一个代理将它注入另一个,只有第一次使用它时才会创建
先举三个解决循环依赖的例子,有兴趣的朋友可以了解一下其他的解决循环依赖的方法,找到了评论区发给我(˵¯͒〰¯͒˵)