BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #65736同步于 2021/7/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

spring的循环依赖问题

TroyAchilles
2021/7/31镜像同步10 回复
最近在看这部分内容,有个问题想请教一下各位[ema1] 假设有两个类A和B,相互依赖,且A和B都被代理 那么两个类在创建过程中有以下流程: 1. 实例化A —> 将A的对象工厂放入三级缓存 —> 为A注入属性 —>发现B未实例化 2. 实例化B —> 将B的对象工厂放入三级缓存 —> 为B注入属性 —>从三级缓存中获取A的代理对象(将A的代理对象称为A1)并将A1注入B—>删除三级缓存中A的对象工厂,将A1放入二级缓存—>将三级缓存中B的对象工厂删除,将B放入一级缓存 3. A从一级缓存中将B注入自身,并放入一级缓存。至此两个bean初始化完成,后续的处理略过 现在我有个问题: 注入B的是A的代理对象A1,而注入A的是最终初始化后的B,也就是 A1—>B,B—>A,这似乎不符合循环依赖
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
cumypig机器人#1 · 2021/7/31
你可以看下尚硅谷的大厂面试题第三季,里面讲了循环依赖
TroyAchilles机器人#2 · 2021/7/31
但是经过测试,即使两个类被代理了,通过getbean生成的两个对象也是互相依赖的,即b中的a就是getbean后获得的a。恳请各位指出我理解的错误,源码实在看不动了[ema1]
TroyAchilles机器人#3 · 2021/7/31
目前找到的资料都没有 提到我这个问题[ema1] 【 在 cumypig 的大作中提到: 】 : 你可以看下尚硅谷的大厂面试题第三季,里面讲了循环依赖
huxuesong09机器人#4 · 2021/8/1
https://blog.csdn.net/chaitoudaren/article/details/105060882 https://blog.csdn.net/gongsenlin341/article/details/111240114 看看这两篇,我也没研究太明白,感觉先创建A的时候是把A的工厂,缓存到三级缓存中,然后populatebean, 不太懂了,没创建A,怎么populate的?一起研究研究
TroyAchilles机器人#5 · 2021/8/1
感谢分享,第一个帖子把我的疑惑给解答了。我尝试着回答一下你的问题,如果有不对恳请各位指出: 容器创建bean有几个过程:实例化bean,属性注入,初始化bean。populate发生在实例化之后。所以在缓存至三级缓存之前,容器已经为A实例化了一个对象,再将A和它的对象工厂存入缓存,然后对A进行populate 【 在 huxuesong09 的大作中提到: 】 : https://blog.csdn.net/chaitoudaren/article/details/105060882 : https://blog.csdn.net/gongsenlin341/article/details/111240114 : 看看这两篇,我也没研究太明白,感觉先创建A的时候是把A的工厂,缓存到三级缓存中,然后populatebean, 不太懂了,没创建A,怎么populate的?一起研究研究
TroyAchilles机器人#6 · 2021/8/1
为了不致歧义,我说得再准确一些:容器会实例化类A,生成一个BeanWrapper,你可以简单地把它当成A的一个对象a,然后将a和它的对象工厂放入三级缓存,再对a进行属性注入 【 在 TroyAchilles 的大作中提到: 】 : 感谢分享,第一个帖子把我的疑惑给解答了。我尝试着回答一下你的问题,如果有不对恳请各位指出: : 容器创建bean有几个过程:实例化bean,属性注入,初始化bean。populate发生在实例化之后。所以在缓存至三级缓存之前,容器已经为A实例化了一个对象,再将A和它的对象工厂存入缓存,然后对A进行populate
huxuesong09机器人#7 · 2021/8/2
【 在 TroyAchilles 的大作中提到: 】 : 为了不致歧义,我说得再准确一些:容器会实例化类A,生成一个BeanWrapper,你可以简单地把它当成A的一个对象a,然后将a和它的对象工厂放入三级缓存,再对a进行属性注入 看了一下源码明白了,这个对象工厂有个参数是这个beanWrapper
chenmengqi机器人#8 · 2021/8/2
还有人用这个呀?spring耽误人学技术
suixin机器人#9 · 2021/8/2
那应该学啥[bbsemoji55358,56596] 【 在 chenmengqi 的大作中提到: 】 : 还有人用这个呀?spring耽误人学技术