什么是循环依赖?

循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图:

注意,这里不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件。

Spring中循环依赖场景有:

  • 构造器的循环依赖
  • setter方式单例,默认方式
  • setter方式原型,prototype

第一种:构造器参数循环依赖

Spring容器会将每一个正在创建的Bean 标识符放在一个“当前创建Bean池”中,Bean标识符在创建过程中将一直保持在这个池中。

因此如果在创建Bean过程中发现自己已经在“当前创建Bean池”里时将抛出BeanCurrentlyInCreationException异常表示循环依赖;而对于创建完毕的Bean将从“当前创建Bean池”中清除掉。

首先我们先初始化三个Bean。

OK,上面是很基本的3个类,,StudentA有参构造是StudentB。StudentB的有参构造是StudentC,StudentC的有参构造是StudentA ,这样就产生了一个循环依赖的情况,

我们都把这三个Bean交给Spring管理,并用有参构造实例化。

下面是测试类:

publicclassTest{

publicstaticvoidmain(String[] args){

ApplicationContext context =newClassPathXmlApplicationContext("com/zfx/student/applicationContext.xml");

//System.out.println(context.getBean("a

互相引用 spring_Spring-bean的几种循环依赖方式相关推荐

  1. Spring IoC 源码系列(四)bean创建流程与循环依赖问题分析

    创建单例 bean 的代码细节在 org.springframework.beans.factory.support.AbstractBeanFactory#getBean 中,getBean 顾名思 ...

  2. Spring源码解析(七)-Bean属性间的循环依赖

    首先复习一下前面学习的Spring容器启动的大致流程,首先Spring会先扫描所有需要实例化的Bean,将这些Bean的信息封装成一个个BeanDefinition,然后注册到BeanDefiniti ...

  3. 使用@Async异步注解导致该Bean在循环依赖时启动报BeanCurrentlyInCreationException异常的根本原因分析,以及提供解决方案

    前言 今天在自己工程中使用@Async的时候,碰到了一个问题:Spring循环依赖(circular reference)问题. 或许刚说到这,有的小伙伴就会大惊失色了.Spring不是解决了循环依赖 ...

  4. Spring是如何利用“三级缓存“巧妙解决Bean的循环依赖问题

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

  5. Spring-bean的循环依赖以及解决方式___Spring源码初探--Bean的初始化-循环依赖的解决

    本文主要是分析Spring bean的循环依赖,以及Spring的解决方式. 通过这种解决方式,我们可以应用在我们实际开发项目中. 什么是循环依赖? 怎么检测循环依赖 Spring怎么解决循环依赖 S ...

  6. Spring 源码解析 - Bean创建过程 以及 解决循环依赖

    一.Spring Bean创建过程以及循环依赖 上篇文章对 Spring Bean资源的加载注册过程进行了源码梳理和解析,我们可以得到结论,资源文件中的 bean 定义信息,被组装成了 BeanDef ...

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

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

  8. 问题:为命名空间,在此被用作类型和此项目作为引用添加将导致循环依赖项

    两个问题: 1.此项目作为引用添加将导致循环依赖项 说明你的两个项目中互相添加了引用.例如你再SQLTest中添加了Sineva.Entity,然后在Sineva.Entity中添加引用SQLTest ...

  9. Spring Bean实例化过程,怎么解决循环依赖

    1.Spring是什么? Spring有很庞大的家族,Spring一般指的其实就是SpringFramework! Ioc和aop 包含在SpringFramework中! SpringFramewo ...

  10. Spring中-IOC-Bean的初始化-循环依赖的解决

    前言 在实际工作中,经常由于设计不佳或者各种因素,导致类之间相互依赖.这些类可能单独使用时不会出问题,但是在使用Spring进行管理的时候可能就会抛出BeanCurrentlyInCreationEx ...

最新文章

  1. numpy数据集练习
  2. 二分查找、upper_bound、lower_bound
  3. opencv图像清晰度计算_收藏|分析君带你认识Python中的十大图像处理工具
  4. go 多线程并发 queue demo
  5. webpack中实现按需加载
  6. 【转】解决XMLHTTP获取网页中文乱码问题
  7. [转]Oracle字符串拼接的方法
  8. 用开源技术巧解代账公司开票据难题
  9. 用计算机给plc编程,plc编程用什么电脑?plc编程用什么配置电脑
  10. 从零开始学Java——基础篇
  11. Linux学习-菜鸟教程知识(一)
  12. 车牌识别EasyPR(2)——车牌颜色定位与偏斜扭转
  13. SQL判断某列中是否包含中文字符、英文字符、纯数字,数据截取
  14. 产品卖不出去?那你该学学向上销售和交叉销售了
  15. Java基础(自己总结)
  16. 朝着先能干活的方向努力。。。奥利给!!!06
  17. Web Caching(Web缓存)
  18. [MicroPython]TurniBit开发板DIY自动窗帘模拟系统
  19. 使用Laravel View Composers在视图之间共享数据
  20. office2016 下载直通车

热门文章

  1. python 清华镜像_树莓派raspberry4B入坑指南 part-1 virtualenv安装python
  2. 第一个android应用程序,深入学习Android 第一个应用程序
  3. nyoj 144小珂的苦恼(关于如何不定方程有整数解问题)
  4. nyoj810 贪心的嘿嘿(想弄死这出题的)
  5. 【UVA12304】2D Geometry 110 in 1!(外接圆/内切圆/切点等圆相关问题的模版题)
  6. Reading Digits(2016southeastern Europe. D题)题解
  7. java中跑批指的是什么_DB2几个问题的处理(三)
  8. badboy html5,html5_ol.htm
  9. python名词同义词只替换2个_用同义词替换句子中的每个单词的Python程序
  10. 机器人总动员中的小草_机器人总动员观后感(精选4篇)