什么是循环依赖
通俗来讲,就是A依赖B或者B依赖A,或者C依赖自己本身,或是三个以上,例如A依赖B,B依赖C,C又依赖A。如下图:
Spring实例Bean的本质
Spring在实例化一个bean的时候,是首先递归的实例化其所依赖的所有bean,直到某个bean没有依赖其他bean,此时就会将该实例返回,然后反递归的将获取到的bean设置为各个上层bean的属性的。
解决方式
第一级缓存:singletonObjects 在 Spring 容器初始化时,它会创建对象的实例并将其放入 singletonObjects 缓存中。这个缓存保存着已经完全初始化的对象实例,可以被其他对象直接引用和使用。
第二级缓存:earlySingletonObjects 如果某个对象正在创建过程中,但还未完成初始化,就会将其放入 earlySingletonObjects 缓存中。这个缓存保存着尚未完成初始化的对象实例,只能在对象创建过程中被其他对象引用和使用。
三级缓存解决循环依赖流程
总结
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。