有关循环依赖和三级缓存的这些问题,你都会么?(三)

发布于 2022-6-20 17:38
浏览
0收藏

 

于是接下来就把早期的AService对象注入给BService。

有关循环依赖和三级缓存的这些问题,你都会么?(三)-开源基础软件社区

此时BService的@Autowired注解注入AService对象就完成了,之后再经过其他阶段的处理之后,BService对象就完完全全的创建完了。

 

BService对象创建完之后,就会将BService放入第一级缓存,然后清空BService对应的第三级缓存,当然也会去清空第二级缓存,只是没有而已,至于为什么清空,很简单,因为BService已经完全创建好了,如果需要BService那就在第一级缓存中就能查找到,不需要在从第二级或者第三级缓存中找到早期的BService对象。

有关循环依赖和三级缓存的这些问题,你都会么?(三)-开源基础软件社区

BService对象就完完全全的创建完之后,那么接下来该干什么呢?此时当然继续创建AService对象了,你不要忘了为什么需要创建BService对象,因为AService对象需要注入一个BService对象,所以才去创建BService的,那么此时既然BService已经创建完了,那么是不是就应该注入给AService对象了?所以就会将BService注入给AService对象,这下就明白了,BService在构建的时候,已经注入了AService,虽然是早期的AService,但的确是AService对象,现在又把BService注入给了AService,那么是不是已经解决了循环依赖的问题了,AService和BService都各自注入了对方,如图。

有关循环依赖和三级缓存的这些问题,你都会么?(三)-开源基础软件社区

然后AService就会跟BService一样,继续处理其它阶段的,完全创建好之后,也会清空二三级缓存,放入第一级缓存。

有关循环依赖和三级缓存的这些问题,你都会么?(三)-开源基础软件社区

到这里,AService和BService就都创建好了,循环依赖也就解决了。

 

这下你应该明白了三级缓存的作用,主要是第二级和第三级用来存早期的对象,这样在有循环依赖的对象,就可以注入另一个对象的早期状态,从而达到解决循环依赖的问题,而早期状态的对象,在构建完成之后,也就会成为完完全全可用的对象。

 

文章转自公众号:三友的java日记

标签
已于2022-6-20 17:38:39修改
收藏
回复
举报
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
    相关推荐