循环依赖解释
bean A 创建时属性注入依赖bean B ,并且bean B创建时属性注入也依赖bean A ,造成 bean A 和bean B 都无法完成初始化问题,形成了闭环。
spring 如何解决循环依赖的?
使用三级缓存去解决的。三个Map
一级缓存 缓存的完整的bean
二级缓存
三级缓存 缓存的是函数接口:通过lambda 把方法传进去(把bean实例和bean名字传进去) (aop创建);不会立即调用。
SpringBoot2.6.0及以上 具体解决方案
最简单的方法在yaml或properties中配置spring.main.allow-circular-references=true 支持循环依赖即可
示例
TestBService 实现类 TestBServiceImpl 中 注入 TestService对象
TestService 实现类 TestServiceImpl 中注入 TestBService对象
@Service
public class TestBServiceImpl extends ServiceImpl<TestBMapper, TestB>
implements TestBService {
@Autowired
private TestService testService;
}
@Service
public class TestServiceImpl extends ServiceImpl<TestAMapper, TestA>
implements TestService {
@Autowired
private TestBService testBservice;
}
在 application.yml 中
spring:
main:
## 支持循环依赖
allow-circular-references: true