spring源码的理解一之循环依赖

首先你要搞清楚什么是循环依赖 ,用一段代码来说明吧

class A{a.set(B b)

}

class { b.set(A a)

}

这样无限制循环下去很容易造成内存溢出

这时候spring解决循环依赖的方法是:运用三个map

map1:singletonObjects

map2:earlySingletonObjects

map3:singletonFactoies

这里我们脑海里要有一个清晰的流程就是:要知道spring获取一个bean的大概流程,

getBean -> dogetBean -> createBean -> doCreateBean

在创建Bean的过程存在三个步骤

1、ceateBeanInstance

2、populateBean

3、innitializeBean

上图中如果检测到了循环依赖,会把创建单例对象中的依赖对象先创建出来

 代码走到这里的时候,A中所依赖的B对象已经在earlySingletonObjects中,之后在getSingleton时候就可以拿到bean对象

 此时A拿到B,顺利完成初始化,然后这时候因为B中持有对A的引用,所以这时候B再拿到A的对象也顺利完成了初始化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值