sping是如何解决循环依赖问题的

首先要知道sping完成一个对象加载到容器时经过 实例化 --- 初始化(属性的注入) 这个过程的
spring使用了三级缓存去解决依赖问题的
我们在setter单例模式注入时,spring的bean加载过程是:
例如循环依赖关系:A->B->A

实现原理:

  1. 先加载A,依次判断(一级缓存)、(二级缓存)、(三级缓存)中是否有A,没有就将A加入(三级缓存)
  2. 发现A依赖B,先加载B(递归加载)
  3. 依次判断(一级缓存)、(二级缓存)、(三级缓存)中是否有B,没有就将B加入(三级缓存)
  4. 加载B的依赖,发现依赖A,依次从(一级缓存)、(二级缓存)、(三级缓存)中查找A,发现(三级缓存)有A,将A上升到(二级缓存)中
  5. 将A注入B的引用,完成B的加载,将B从(三级缓存)升级至(一级缓存)中
  6. A依赖的B加载完了,继续加载A完成。将A从(二级缓存)上升到(一级缓存)

如果时业务代码中出现了循环依赖

  1. 首先要确定的是业务代码肯定设计有问题才会出现这种情况,第一建议先捋捋业务代码的各个逻辑
  2. 如果实在是没办法,那么就不要用构造注入的方式,改用setter方式注入或者@Autowride注解注入即可
# spring 

评论

渣男 : 456
三群的弟弟 : 123
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×