美文网首页
spring解决循环依赖

spring解决循环依赖

作者: 九灬日 | 来源:发表于2024-02-25 15:44 被阅读0次

问题:两个类A和B,A依赖B,B又依赖A,如图

A类 B类

配置:spring.main.allow-circular-references=true

主要处理代码:

     AbstractAutowireCapableBeanFactory.doCreateBean()   

     DefaultSingletonBeanRegistry

解决此问题需要用到DefaultSingletonBeanRegistry中的三个缓存区(都是Map,根据beanName操作)

1、singletonObjects 用来存放完成的Bean(一级缓存区)

2、earlySingletonObjects 用来存放Bean(ObjectFactory.getObject())(二级缓存区)

3、singletonFactories 用来存放Bean(实例化但未初始化)的ObjectFactory(三级缓存区)

流程:

1、首先,通过构造实例化A,包装成ObjectFactory放入singletonFactories;

2、尝试初始化A(处理A的依赖注入),由于没有B实例,同样去实例B,包装成ObjectFactory放入singletonFactories

3、初始化B,从singletonFactories中获取A的ObjectFactory,通过.getObject()方法获取A的实例放入earlySingletonObjects,删除singletonFactories中A的ObjectFactory,将A注入到B来获取完整的B实例,存放到singletonObjects,删除singletonFactories中B的ObjectFactory

4、继续初始化A,将B注入到A,得到完整的A,存放到singletonObjects,删除earlySingletonObjects中的A;

5、至此两个对象创建完成,并都存到了singletonObjects中,之后从容器中获取对象都是从singletonObjects中获取。

相关文章

  • Spring 是如何解决循环依赖的?

    Spring 是如何解决循环依赖的? 循环依赖: Spring 循环依赖有三种情况: 构造器的循环依赖,这种依赖 ...

  • Spring是怎么解决循环依赖的?

    Spring是怎么解决循环依赖的?首先,Spring 解决循环依赖有两个前提条件: 不全是构造器方式的循环依赖必须...

  • spring循环依赖的解决方案

    spring循环依赖的解决方案 Spring IOC循环依赖解决方案分析 这里Spring主要用了三层缓存来完成对...

  • Spring解决循环依赖

    Spring解决循环依赖 Spring通过三级缓存来解决循环依赖,一级缓存为单例池(singletonObject...

  • Spring循环依赖问题

    什么是循环依赖 循环依赖就是两个对象之间存在相互依赖的关系; Spring是如何解决循环依赖的 Spring使用三...

  • 2020-05-16

    Spring IOC 容器源码分析 - 循环依赖的解决办法 本文,我们来看一下 Spring 是如何解决循环依赖问...

  • 一文详解Spring中的循环依赖,面试必杀技

    目录 前言 什么是循环依赖? 什么情况下循环依赖可以被处理? Spring是如何解决的循环依赖? 简单的循环依赖(...

  • Spring解决循环依赖

    Spring当中的循环依赖问题是面试中经常提及的,这一次我们就来聊一聊这个问题。首先,循环依赖其实指的就是多个类之...

  • Spring 解决循环依赖

    [toc] 循环依赖 循环依赖就是N个类中循环嵌套引用,如果日常开发中我们用new对象的方式发生这种循环依赖的程序...

  • Spring解决循环依赖

    1、什么是循环依赖 循环依赖就是循环引用,就是两个或多个bean相互之间的持有对方,比如A引用B,而B又引用A,则...

网友评论

      本文标题:spring解决循环依赖

      本文链接:https://www.haomeiwen.com/subject/tocaadtx.html