spring 怎么解决循环依赖的

spring 怎么解决循环依赖的

理解spring的生命周期

分为容器启动阶段、bean的实例化阶段、bean的属性注入阶段、bean的初始化阶段、bean的缓存阶段、bean的销毁阶段

怎么解决循环依赖

假设有两个对象 X和Y,X依赖了Y,Y依赖了X,spring能解决循环依赖,底层主要接住了3个map。
第一个是singletonObjects:缓存实例化好的bean
第二个是earlySingletonObjects:缓存半成品对象,多级循环依赖的社会化,不重复创建对象,提高效率
第三个是singletonFactories:缓存ObjectFactory对象
当在创建X对象的时候,会将lambda对象ObjectFactory放到singletonFactories中
后续进行属性注入的时候,发现需要注入Y,就需要去创建Y,当创建Y的时候,也会将对应的lambda对象ObjectFactory放到singletonFactories中
Y的生命周期继续往下走,然后填充属性的时候,发现需要填充X,就会从三级缓存去获取到ObjectFactory lambda表达式
执行表达式获取到半成品对象,在这个阶段,可以做很多扩展,比如AOP,提前完成代理
存到二级缓存earlySingletonObjects中
将X从三级缓存singletonFactories中移除
然后Y属性注入完成后,Y就创建完成了,
继续进行X属性填充,填充完后,X也创建完成

posted @   尐海爸爸  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示