什么是循环依赖?
从字面上来理解就是 A依赖B的同时B也依赖了A ,就像上面这样,或者C依赖与自己本身。体现到代码层次就是这个样子
@Component
publicclassA{
// A中注入了B
@Autowired
privateB b;
}
@Component
publicclassB{
// B中注入了A
@Autowired
privateA a;
}
// 自己依赖自己
@Component
publicclassC{
// C中注入了C
@Autowired
privateC c;
}
虽然体现形式不一样,但是实际上都是循环依赖的问题。
什么情况下循环依赖可以被处理?
Spring解决循环依赖是有 前置条件 的
出现循环依赖的Bean必须要是 单例 (singleton),如果依赖prototype则完全不会有此需求。
依赖注入的方式 不能全是 构造器注入的方式(只能解决setter方法的循环依赖,这是错误的)
1. AB 均采用setter方法注入 结果OK
2. AB 均采用属性Autowired注入 结果ok
3. AB均采用构造器方法注入 出现循环依赖
4. A中注入B的方式为setter方法,B中注入A的方式为构造器