当前位置:网站首页>详解三级缓存解决循环依赖

详解三级缓存解决循环依赖

2022-06-10 19:29:00 -隐函数-

循环依赖

所谓的循环依赖就是

A对象创建的时候需要通过@Autowired依赖注入B对象才能创建成功,B对象创建的时候需要@Autowired依赖注入A对象才可以创建成功,这种情况之下,我们称之为循环依赖,循环依赖主要发生在Bean的set赋值这个过程

其实@Autowired就已经解决了循环依赖的问题

缓存

三级缓存解决循环依赖

我们以A对象为例,A对象通过BeanFunctionRead读取配置文件,利用反射机制进行实例化创建之后,因为此时没有赋值初始化等,还不是一个完整的bean所以无法放进一级缓存,先放入三级缓存之中,

然后调用Autowired注解进行属性的赋值,发现B对象还没有创建出来,先暂停,准备创建B对象

B对象利用反射机制实例化之后也放进三级缓存当中,然后进行Autowired注解进行属性赋值,

发现需要A注解,那么从一、二、三 级缓存当中依次去寻找,发现三级缓存当中存在A注解,那么就调用ObjectFactory中的getObject方法进行调用,然后B把A放进二级缓存中,B进行赋值

然后执行其他阶段,直至把B创建出来放进一级缓存当中,之后清空二三缓存

B创建成功之后,A可以获取B就可以继续进行创建,然后A开始进行Autowired注解进行赋值,然后继续执行其他阶段,然后A对象创建成功,放进一级缓存当中,同时清空二三缓存

原网站

版权声明
本文为[-隐函数-]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_56777219/article/details/125194726