【不懂就画一千零一夜】Spring setter 注入是如何解决循环依赖问题的? 构造注入为啥解决不了循环依赖?

99 阅读1分钟

1 注入是如何解决循环依赖问题的? 构造注入为啥解决不了循环依赖?

  • 构造注入解决不了:因为构造方法创建实例,每次都要new一个要构造的实例bean,而A创建时,依赖B,就去创建B,B又依赖了A,继续构造A,如此循环下去 A(B) B(A) A(B)->....
  • 设值注入:使用三级缓存来解决循环依赖问题;构造的对象使用无参构造方法,会把A先放入二级缓存(前置也会把A的工厂方法放到三级缓存),后面B,会从二级缓存中获取A(中间态)完成属性设置,B就直接进入了一级缓存中,递归回A,最后也进入一级缓存。

2 源码位置

  1. 1级放成品
  2. 2级是中间态
  3. 3级是lamb工厂方法