【传送门】:通过循环依赖问题彻底理解 Spring IOC 的精华

1. 简介

  循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。

  Spring 中的循环依赖有构造器循环依赖和setter循环依赖。

2. 原因分析

2.1 构造器注入

  spring容器会将当前正在创建的bean缓存,如果在bean创建的过程中发现自己在这个缓存,则初始化失败

2.2 setter注入singleton 

  singletonFactories:实例化阶段的单例对象的cache

  earlySingletonObjects: 一实例化为完成初始化的单例对象cache

  singletonObjects: 完成初始化的单例对象cache

  默认的bean为singleton,创建未完成和完成的都会进行缓存,setter方式注入时,如果对象没有创建完成,则可以先将实例化未初始化的bean(singletonFactories中的缓存的对象)进行注入,而且注入的是一个引用,后面这个bean实例化完即可

2.3 setter注入prototype 

  prototype类型的beanspring不会缓存,此时注入时必须要一个完成的bean,不能注入创建未完成的bean

 

相关文章:

  • 2022-12-23
  • 2021-05-11
  • 2021-07-11
  • 2021-11-26
  • 2021-09-05
  • 2022-12-23
猜你喜欢
  • 2022-01-01
  • 2021-11-26
  • 2021-04-10
  • 2021-10-30
  • 2021-11-30
相关资源
相似解决方案