Spring如何解决循环依赖的?
假设有两个实例A,B循环依赖。
且作用域都是单例,因为Spring只支持单例的循环依赖。
假设扫描到了A,调用getBean方法,由于是单例,调用getSingleton方法,发现三个缓中都没有A,进入CreateBeanInstance的流程。此时创建的是能够创建A的工厂放进了三级缓存里面,然后执行populateBean的流程,也就是填充A的属性。
填充A的属性遇到了B,调用getBean()一样的流程,到了填充B属性的时候,发现依赖A,调用getBean(A),此时三级缓存的第三级别缓存具有A 的工厂,利用三级缓存获得的工厂生成A,放入到二级缓存同时删除三级缓存的功能工厂,返回给B。此时B创建完成,放到一级缓存同时返回给A。至此,循环依赖解析完成。

注意:Spring仅仅支持单例模式的setter注入。
因为在构造包装类是在注入三级缓存之前,脱离了三级缓存的支持,均不支持循环依赖。

相关文章:

  • 2020-04-07
  • 2021-07-16
  • 2020-04-27
  • 2019-08-25
  • 2021-08-18
  • 2021-06-11
  • 2021-12-17
  • 2021-07-16
猜你喜欢
  • 2021-09-13
  • 2020-06-22
  • 2021-01-26
  • 2020-12-31
  • 2020-01-13
  • 2020-12-21
相关资源
相似解决方案