spring无法解决构造器的循环依赖,对上述例子稍微进行改动:

@Component("b")
public class B {private A a;public B(A a) {this.a = a;}
}
@Component("a")
public class A {private B b;public A(B b) {this.b = b;}// 该方法使用了aop来完成pubic void test(){}
}

这种构造器的循环依赖spring是无法正常进行创建的,因为在a进行初始化的时候,在构造器阶段就会去找b对象,在去构造b的原始对象时,在初始化也就是构造器阶段的时候又会去找a的原始对象,这时候spring无法解决,因为这是两个构造方法进行的循环依赖,此时三级缓存中的map中还没有放入原始的对象信息,就更无法创建出二级缓存的不完全的a的代理对象。
解决办法:
@lazy注解,懒加载机制:

@Component("a")
public class A {private B b;@lazypublic A(B b) {this.b = b;}// 该方法使用了aop来完成pubic void test(){}
}

懒加载表现在什么地方呢?这时候如果打断点在this.b=b处,会发现spring是构造出了b的代理对象,在真正用到b对象时,b的代理对象才会去单例池中寻找b对象,去实现方法。

spring无法用三级缓存解决循环依赖的问题分析相关推荐

  1. 京东一面:Spring 为何需要三级缓存解决循环依赖,而不是二级缓存?我懵了。。...

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:cnblogs.com/semi-sub/p/13548479.html 前言 bean生命周期 三级缓存解决循环依赖 总结 ...

  2. 为什么Spring需要三级缓存解决循环依赖,而不是二级缓存?

    来源:https://www.cnblogs.com/semi-sub/p/13548479.html 在使用spring框架的日常开发中,bean之间的循环依赖太频繁了,spring已经帮我们去解决 ...

  3. Spring三级缓存解决循环依赖问题详解

    spring三级缓存解决循环依赖问题详解 前言 这段时间阅读了spring IOC部分的源码.在学习过程中,自己有遇到过很多很问题,在上网查阅资料的时候,发现很难找到一份比较全面的解答.现在自己刚学习 ...

  4. Spring——三级缓存解决循环依赖详解

    三级缓存解决循环依赖详解 一.什么是三级缓存 二.三级缓存详解 Bean实例化前 属性赋值/注入前 初始化后 总结 三.怎么解决的循环依赖 四.不用三级缓存不行吗 五.总结 一.什么是三级缓存 就是在 ...

  5. Spring三级缓存解决循环依赖

    1. 前言 循环依赖:就是N个类循环(嵌套)引用. 通俗的讲就是N个Bean互相引用对方,最终形成闭环.用一副经典的图示可以表示成这样(A.B.C都代表对象,虚线代表引用关系): 其实可以N=1,也就 ...

  6. 解鞍卸甲——手写简易版Spring框架(终):使用三级缓存解决循环依赖问题

    什么是三级缓存 按照目前我们实现的 Spring 框架,是可以满足一个基本需求的,但如果你配置了A.B两个Bean对象互相依赖,那么立马会抛出 java.lang.StackOverflowError ...

  7. Spring的三级缓存解决循环依赖

    一.什么是Spring三级缓存 第一级缓存:也叫单例池,存放已经经历了完整生命周期的Bean对象. 第二级缓存:存放早期暴露出来的Bean对象,实例化以后,就把对象放到这个Map中.(Bean可能只经 ...

  8. Spring使用三级缓存解决循环依赖?终于完全弄明白了

    文章阅读前推荐 推荐先去看看源码,源码很短,但是对于我们在脑子里构建一个完整思路很重要.看起来非常简单,只需要双击shift,全局查找文件:AbstractAutowireCapableBeanFac ...

  9. 手写Spring-第十六章-旋转吧雪月花!用三级缓存解决循环依赖

    前言 循环依赖,一直是一个令人头疼的问题.虽然我们一般情况下会尽量避免这种情况的发生,但很多时候它会在无意识的情况下出现.比如隔了好几个bean之后,发现循环起来了.那么什么是循环依赖呢?其实就是A依 ...

最新文章

  1. 计算机学院特色游戏,网络游戏七大特点浅析
  2. android除去标题栏或全屏
  3. 麦格纳软件公司绩效考核信息化管理解决方案
  4. [渝粤教育] 西南科技大学 西方经济学 在线考试复习资料(1)
  5. 前端学习(3285):立即执行函数四
  6. Ubuntu搭建tftp服务器
  7. spring IOC容器 Bean 管理——基于注解方式
  8. Bootstrap3栅格系统布局实例
  9. 安卓团课快进_青年大学习网上主题团课第十季第七期答案
  10. [NOI导刊2010提高]黑匣子
  11. jenkins+ansible+gitlab
  12. MATLAB 批量下载网页中的数据
  13. 简单的交换机下设备连接,路由器互通
  14. 关于奇亚Chia(XCH)的一些理解,共识机制 - 爆块机制
  15. 关系图谱服务的技术方案设计
  16. Jlink仿真sw调试方式的4线连接方式
  17. Unicode blocks 统计
  18. 什么是Chrome稳定版,Beta版,Dev版和Canary版发布渠道?(转载)
  19. mac 下备份同步qq聊天纪录
  20. 软件测试:保障软件质量的关键性关口——记中国工商银行软件开发中心北京研发_manok_新浪博客...

热门文章

  1. Java黑皮书课后题第5章:5.2(重复加法)程序清单5-4产生了5个随机减法问题。改写该程序,使它产生10个随机加法问题,加数时两个1到15之间的整数。显示正确答案的个数和完成测试的时间
  2. React+dva+antd的运用
  3. 使用shell脚本对Linux系统和进程资源进行监控
  4. PowerDesigner如何导出建表sql脚本(转)
  5. 牛客网(剑指offer) 第六题 旋转数组的最小数字
  6. PHP学习记录第一篇:Ubuntu14.04下LAMP环境的搭建
  7. [python] 常用正则表达式爬取网页信息及分析HTML标签总结
  8. C# 文件操作之创建文件夹
  9. 将用户数据分成一个个数据块传输的优点不包括( )
  10. 拓扑排序(Topological Sorting)