什么是循环依赖?

抛出的异常是:beanCurrentlyInCreationException

标题

单例bean中,属性互相引用的场景;

两中注入方式对循环依赖的影响?

构造方法注入,可能会造成循环依赖的问题;建议用setter方法注入;

即AB循环依赖问题只要A的注入方式是setter且singleton,就不会有循环依赖问题;

注意:默认的单例(singleton)场景是支持循环依赖的,不报错;

原型(prototype)场景是不支持循环依赖的,会报错;

重要结论:

DefaultSingletonBeanRegistry

标题

标题

一级缓存:也叫单例池;存放已经经历了完整生命周期的bean对象(即已经初始化好了的bean);

二级缓存:存放早期暴露出来的Bean对象,Bean的生命周期未结束(属性还没填充完);(即实例化了,但未初始化的bean)

三级缓存:存放可以生成bean的工厂;(存放的是FactoryBean。假如A类实现了FactoryBean,那么依赖注入的时候不是A类,而是A类产生的bean)

只有单例的Bean会通过三级缓存提前暴露来解决循环依赖问题,而非单例的bean,每次从容器中获取都是一个新的对象,都会重新创建,所以非单例的Bean是没有缓存的,不会将其放到三级缓存中。

标题

标题

文字总结

调用的流程图:

Spring-循环依赖(circular dependencies)相关推荐

  1. Spring 循环依赖(circular dependency)

    一.什么是循环依赖 循环依赖即循环引用,形成闭环.比如,A 依赖 B,B 又依赖 A,形成了循环依赖:或者 A 依赖 B,B 依赖 C,C 又依赖 A,形成了循环依赖:更或者是自己依赖自己.如图: 这 ...

  2. 这个Spring循环依赖的坑,90%以上的人都不知道

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:Mythsman 原文:https://blog.myths ...

  3. 这个 Spring 循环依赖的坑,90% 以上的人都不知道

    点击上方"后端技术精选",选择"置顶公众号" 技术文章第一时间送达! 作者:Mythsman blog.mythsman.com/post/5d838c7c2d ...

  4. Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)

    总览 问题 详解 String.intern()的作用 link LeetCode的Two Sum题 link 什么是可重入锁? link 谈谈LockSupport link 谈谈AQS link ...

  5. Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3

    Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3 总览 问题 详解 String.intern()的作用 link LeetCode的Two Sum题 ...

  6. 烂了大街的 Spring 循环依赖问题,你以为自己就真会了吗

    前言 循环依赖问题,算是一道烂大街的面试题了,解毒之前,我们先来回顾两个知识点: 初学 Spring 的时候,我们就知道 IOC,控制反转么,它将原本在程序中手动创建对象的控制权,交由 Spring ...

  7. 【spring容器启动】之bean的实例化和初始化(文末附:spring循环依赖原理)

    本次我们通过源码介绍ApplicationContext容器初始化流程,主要介绍容器内bean的实例化和初始化过程.ApplicationContext是Spring推出的先进Ioc容器,它继承了旧版 ...

  8. Spring循环依赖的三种方式以及解决办法

    Spring循环依赖的三种方式以及解决办法 [转]https://www.cnblogs.com/liuqing576598117/p/11227007.html 示例 https://github. ...

  9. spring循环依赖解决办法

    Spring循环依赖的解决办法!包含代码讲解!!! 大家面试相信遇到过这么一个问题. 面试官问:你知道spring的循环依赖吗,可以讲一下吗? 我:这个我熟啊,循环依赖就是spring构造一个bean ...

  10. 聊透Spring循环依赖

    本文聊一下和依赖注入密切相关,并且在实际开发中很常见,面试也很喜欢问的一个问题:Spring是怎么解决循环依赖的?  之前就被问过Spring是怎么解决循环依赖的问题,当时年少无知,对Spring源码 ...

最新文章

  1. mysql rpc_使用XML-RPC和MySQL处理中文字符
  2. springboot中java泛型使用
  3. 基于 Knative 低成本部署在线应用,灵活自动伸缩
  4. codeigniter文件上传问题
  5. 2016.NET Core相关内容回顾
  6. AC日记——Count on a tree bzoj 2588
  7. mysql 处理数据_MySQL数据库,如何处理重复的数据?
  8. 【脑筋急转弯】—— 在网格中移动
  9. 纯个人整理!分享珍藏很久的《手把手AI项目》合集手册(附链接)
  10. 通过tf的tensorboard可视化训练进度
  11. Colab与谷歌云盘结合使用
  12. 营业执照在线生成_平罗县实现个体户营业执照“秒批”
  13. php连接sql server
  14. Hadoop基础【HDFS的shell,客户端操作、上传下载流程】
  15. 小程序嵌套的h5页面的转发功能
  16. 敏锐嗅出商机,她瞄准花卉市场的空白,将花店开出名气
  17. 三菱FX5U系列PLC内置模拟量使用方法和输入输出信号接线
  18. win10计算机中删除桌面,win10系统电脑桌面壁纸历史记录怎么删除
  19. 8、灰度图的腐蚀、膨胀、开闭运算、顶帽底帽
  20. 【Python】《Python语言程序设计》(嵩天 、黄天羽 、礼欣)测验单项选择题答案与解析合辑

热门文章

  1. 苹果开发者账号申请 App IDs(应用身份证)
  2. 同相放大器、反相放大器的区别与优劣
  3. Oracle ADR(Automatic Diagnostic Repository)介绍
  4. 外汇交易与实务--即期外汇交易
  5. 【互联网及其应用】第7章计算机网络安全及管理技术
  6. 传统量化金融时序模型(ARMA,ml-XGBoost,dl-LSTM)
  7. 教你轻松调DCT和ICC之间Timing与Congestion的一致性
  8. 浩辰3D软件新手入门攻略:草图平面
  9. Windows下Qt程序初步打包
  10. 足球数据API接口 - 【球员资料】API调用示例代码