Spring初始化之循环依赖

InjectionMetadata.inject

resolveFieldValue解析去解析 对象的属性时

会自动去解析该属性是否是Bean依赖对象

DefaultListableBeanFactory.doResolveDependency会去调用DependencyDescriptor.resolveCandidate方法

而DependencyDescriptor.resolveCandidate方法就是回去调用BeanFactory.getBean方法

最终还是会调用AbstractBeanFactory.doGetBean方法,再回到AbstractAutowireCapableBeaFactory.doCreateBean,进行循环依赖注入。

循环依赖出现的问题
Spring通过三级缓存思想,对循环依赖出现的问题进行规避,到出现循环依赖问题时,提前中断初始化。

它的思想是,当某个Bean A在初始化时,放入到正创建Bean的缓存中,当Bean B在在初始化时,如果需要注入Bean A,而Bean B初始化时也需要注入Bean A,而Bean A必须依赖于Bean B初始化完成,导致Bean A无法初始化,BeanA 无法初始化就会导致BeanB也无法初始化,就会出现循环依赖问题,使项目无法启动

posted @   vello  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示