什么是循环依赖?

从字面上来理解就是 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的方式为构造器