Spring源码解析之循环依赖处理(5)

本文详细解析了Spring框架如何处理循环依赖问题,主要涉及构造器和属性循环依赖的区别,以及Spring针对属性循环依赖的三级缓存机制。通过对`doGetBean()`、`singletonObjects`、`earlySingletonObjects`和`singletonFactory`的分析,阐述了Spring如何在bean创建过程中通过ObjectFactory提前曝光来解决循环依赖,确保bean的正确初始化。
摘要由CSDN通过智能技术生成

什么是循环依赖?

    循环依赖其实就是两个或者两个以上的bean,互相引用对方,形成闭环,如A--->B,B--->C,C--->A。这样的依赖就是循环依赖。而循环依赖在正常的情况下就是一个死循环,A的初始化为引起B的初始化,B的初始化会触发C的初始化,而C的初始化会触发A的初始化,死循环了。

   Spring的循环依赖有两种:

  1. 构造器的循环依赖
  2. 属性的循环依赖      

      构造器的循环依赖是没有Spring的无法解决,所以会抛出异常。我们分析的都是基于属性的循环依赖。

循环依赖的处理。

 第一次处理循环依赖的地方是doGetBean()方法中的:

Object sharedInstance = getSingleton(beanName);
protected Object getSingleton(String beanName, boolean allowEarlyReference) {
    Object singletonObject = this.singletonObjects.get(beanName);
    if (singletonObject == null && isSingletonCurrentlyInCreation(beanName)) {
        synchronized (this.singletonObjects) {
            singletonObject = this.earlySingletonObjects.get(beanName);
            if (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值