spring源码解读第三篇----------------------------spring的循环依赖解决

 

 

spring源码解读第三篇----------------------------spring的循环依赖解决

 

获取bean操作的流程时先从一级缓存中获取,之后到二级缓存中获取,之后到三级缓存获取

(bean对象先是放到三级缓存中,之后从三级缓存中移除然后放到二级缓存中)三级缓存中存储的是一个key与lamada表达式,二级缓存存储的时一个key与未初始化的bean对象

 

 

 spring源码解读第三篇----------------------------spring的循环依赖解决

 

 注意到这个方法,实现循环依赖问题解决的核心关键方法。

 

spring源码解读第三篇----------------------------spring的循环依赖解决

 

 

 这里的lamda表达式主要用于bean对象的创建操作

spring源码解读第三篇----------------------------spring的循环依赖解决

 

注意此处的lamda表达式,addSingletonFactory方法操作三级缓存存储是一个lamda表示式,这里lamda表达式主要用于循环解决处理的。这里如果循环引用的话那这个那么这的bean可以理解为一个创建成功bean,会从三级缓存中将这个bean对象(半成品)赋给它。这里的lamda被调用之后就会将bean实例对象放入到二级缓存中

 spring源码解读第三篇----------------------------spring的循环依赖解决

 

注意此处三级缓存中lamda表达式被调用之后将生成的singletonFactoru对象放入到二级缓存中

 

spring源码解读第三篇----------------------------spring的循环依赖解决

 

 

spring源码解读第三篇----------------------------spring的循环依赖解决

 

最后将回到doGetBean方法中,最终将bean对象放入到一级缓存中,完成对象的创建操作。

 

 

---------------------spring 循环依赖核心源码解析结束,下面做一下总结

 

 

 

 

spring源码解读第三篇----------------------------spring的循环依赖解决

 

 常见问题解答:

 

spring源码解读第三篇----------------------------spring的循环依赖解决

 

 

spring源码解读第三篇----------------------------spring的循环依赖解决

 

 

其他一些问题:懒加载无法解决循环依赖问题

 

相关文章:

  • 2022-12-23
  • 2021-10-23
  • 2021-09-11
  • 2022-02-15
  • 2021-10-05
  • 2021-08-18
  • 2021-08-23
猜你喜欢
  • 2021-07-04
  • 2021-06-05
  • 2021-12-31
  • 2021-07-04
  • 2021-08-19
  • 2022-12-23
  • 2021-05-23
相关资源
相似解决方案