更多文章点击--spring源码分析系列

 

1、spring循环依赖场景
2、循环依赖解决方式: 三级缓存

 

1、spring循环引用场景

循环依赖的产生可能有很多种情况,例如:

  • A的构造方法中依赖了B的实例对象,同时B的构造方法中依赖了A的实例对象
  • A的构造方法中依赖了B的实例对象,同时B的某个field或者setter需要A的实例对象,以及反之
  • A的某个field或者setter依赖了B的实例对象,同时B的某个field或者setter依赖了A的实例对象,以及反之

Spring对于循环依赖的解决不是无条件的,首先前提条件是针对scope单例并且允许解决循环依赖的对象。以上三种情况: 第一种Spring无法解决, 第二种只能解决一部分情况, 第三种可以解决

以下为对应的示例demo:

 1 public class CirculationA {
 2 
 3     private CirculationB circulationB;
 4 
 5     public CirculationA(CirculationB circulationB) {
 6         this.circulationB = circulationB;
 7     }
 8 
 9     public CirculationA() {
10     }
11 
12     public CirculationB getCirculationB() {
13         return circulationB;
14     }
15 
16     public void setCirculationB(CirculationB circulationB) {
17         this.circulationB = circulationB;
18     }
19 }
20 
21 public class CirculationB {
22     private CirculationA circulationA;
23 
24     public CirculationB(CirculationA circulationA) {
25         this.circulationA = circulationA;
26     }
27     public CirculationB() {
28     }
29 
30     public CirculationA getCirculationA() {
31         return circulationA;
32     }
33 
34     public void setCirculationA(CirculationA circulationA) {
35         this.circulationA = circulationA;
36     }
37 }
pojo.java

相关文章: