京东一面:Spring 为何需要三级缓存解决循环依赖,而不是二级缓存?我懵了。。
开发者全社区
共 4365字,需浏览 9分钟
·
2022-04-12 04:44
上一篇:一边裁员,一边招人。。
作者:半分、
来源:https://www.cnblogs.com/semi-sub/p/13548479.html
前言
bean生命周期
可以看到initializeBean方法中,首先调用的是使用的Aware接口的方法,我们具体看一下invokeAwareMethods方法中会调用Aware接口的那些方法
再看一个注意的点
三级缓存解决循环依赖
上一小节对bean的生命周期做了一个整体的流程分析,对spring如何去解决循环依赖的很有帮助。前面我们分析到填充属性时,如果发现属性还未在spring中生成,则会跑去生成属性对象实例。
我们可以看到填充属性的时候,spring会提前将已经实例化的bean通过ObjectFactory半成品暴露出去,为什么称为半成品是因为这时候的bean对象实例化,但是未进行属性填充,是一个不完整的bean实例对象
spring利用singletonObjects, earlySingletonObjects, singletonFactories三级缓存去解决的,所说的缓存其实也就是三个Map
下面是重点,我们发现这个二级缓存好像显得有点多余,好像可以去掉,只需要一级和三级缓存也可以做到解决循环依赖的问题???
我们发现AService的testAopProxy被AOP代理了,看看传入的匿名内部类的getEarlyBeanReference返回的是什么对象。想成为架构师,这份架构师图谱建议看看,少走弯路。
总结
评论