spring循环依赖

1 spring循环依赖图


2 步骤

2.1.'getBean’创建A对象 入value为lamda表达式的‘三级缓存’

spring循环依赖_第1张图片

2.2 填充A对象的属性B,把运行时的Bean引用’RuntimeBeanReference’(引用了一个地址,方便后续进行填充工作)并不是指向某一个具体对象。所以无法直接赋值,需要后续处理

2.3 创建B对象,加三级缓存

spring循环依赖_第2张图片

2.4 给B对象的A属性赋值调用’getBean’ 先获取一级缓存(没有),再获取二级缓存(没有),获取三级缓存中的lamda表达式并执行getEarlyBeanReference


此时的A是一个半成品对象,然后放入二级缓存,删除三级缓存,之后返回A对象,给B对象中的A属性赋值,此时B已经是成品了,之后把B放入一级缓存,删除二三急缓存,有了成品B就可以给A对象中的B属性赋值返回。A是成品之后放入一级缓存,删除二三级

spring循环依赖_第3张图片

你可能感兴趣的:(java面试相关,spring,java,后端)