1 spring循环依赖图
2 步骤
2.1.'getBean’创建A对象 入value为lamda表达式的‘三级缓存’
2.2 填充A对象的属性B,把运行时的Bean引用’RuntimeBeanReference’(引用了一个地址,方便后续进行填充工作)并不是指向某一个具体对象。所以无法直接赋值,需要后续处理
2.3 创建B对象,加三级缓存
2.4 给B对象的A属性赋值调用’getBean’ 先获取一级缓存(没有),再获取二级缓存(没有),获取三级缓存中的lamda表达式并执行getEarlyBeanReference
此时的A是一个半成品对象,然后放入二级缓存,删除三级缓存,之后返回A对象,给B对象中的A属性赋值,此时B已经是成品了,之后把B放入一级缓存,删除二三急缓存,有了成品B就可以给A对象中的B属性赋值返回。A是成品之后放入一级缓存,删除二三级