什么是循环依赖?
顾名思义,就是假设有bean A和bean B,A的实例化依赖于B实例的存在,B的实例化也必须依赖于A实例的存在。如果没有相关的处理方案,肯定是会陷入死循环的。那么Spring是如何来解决这个问题的呢?
循环依赖的场景
单例的setter注入:
@Service
public class TestService1 {
@Autowired
private TestService2 testService2;
public void test1() {
}
}
@Service
public class TestService2 {
@Autowired
private TestService1 testService1;
public void test2() {
}
}
这是一个经典的循环依赖,但是它能正常运行,得益于spring的内部机制,
让我们根本无法感知它有问题,因为spring默默帮我们解决了。
spring.main.allow-circular-references=true来解决,但这种纵容造成了大批低质量的代码产生