互相引用 spring_Spring-bean的几种循环依赖方式
什么是循环依赖?
循环依赖其实就是循环引用,也就是两个或则两个以上的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的几种循环依赖方式相关推荐
- Spring IoC 源码系列(四)bean创建流程与循环依赖问题分析
创建单例 bean 的代码细节在 org.springframework.beans.factory.support.AbstractBeanFactory#getBean 中,getBean 顾名思 ...
- Spring源码解析(七)-Bean属性间的循环依赖
首先复习一下前面学习的Spring容器启动的大致流程,首先Spring会先扫描所有需要实例化的Bean,将这些Bean的信息封装成一个个BeanDefinition,然后注册到BeanDefiniti ...
- 使用@Async异步注解导致该Bean在循环依赖时启动报BeanCurrentlyInCreationException异常的根本原因分析,以及提供解决方案
前言 今天在自己工程中使用@Async的时候,碰到了一个问题:Spring循环依赖(circular reference)问题. 或许刚说到这,有的小伙伴就会大惊失色了.Spring不是解决了循环依赖 ...
- Spring是如何利用“三级缓存“巧妙解决Bean的循环依赖问题
前言 循环依赖:就是N个类循环(嵌套)引用. 通俗的讲就是N个Bean互相引用对方,最终形成闭环.用一副经典的图示可以表示成这样(A.B.C都代表对象,虚线代表引用关系): 注意:其实可以N=1,也就 ...
- Spring-bean的循环依赖以及解决方式___Spring源码初探--Bean的初始化-循环依赖的解决
本文主要是分析Spring bean的循环依赖,以及Spring的解决方式. 通过这种解决方式,我们可以应用在我们实际开发项目中. 什么是循环依赖? 怎么检测循环依赖 Spring怎么解决循环依赖 S ...
- Spring 源码解析 - Bean创建过程 以及 解决循环依赖
一.Spring Bean创建过程以及循环依赖 上篇文章对 Spring Bean资源的加载注册过程进行了源码梳理和解析,我们可以得到结论,资源文件中的 bean 定义信息,被组装成了 BeanDef ...
- Spring循环依赖的三种方式以及解决办法
Spring循环依赖的三种方式以及解决办法 [转]https://www.cnblogs.com/liuqing576598117/p/11227007.html 示例 https://github. ...
- 问题:为命名空间,在此被用作类型和此项目作为引用添加将导致循环依赖项
两个问题: 1.此项目作为引用添加将导致循环依赖项 说明你的两个项目中互相添加了引用.例如你再SQLTest中添加了Sineva.Entity,然后在Sineva.Entity中添加引用SQLTest ...
- Spring Bean实例化过程,怎么解决循环依赖
1.Spring是什么? Spring有很庞大的家族,Spring一般指的其实就是SpringFramework! Ioc和aop 包含在SpringFramework中! SpringFramewo ...
- Spring中-IOC-Bean的初始化-循环依赖的解决
前言 在实际工作中,经常由于设计不佳或者各种因素,导致类之间相互依赖.这些类可能单独使用时不会出问题,但是在使用Spring进行管理的时候可能就会抛出BeanCurrentlyInCreationEx ...
最新文章
- numpy数据集练习
- 二分查找、upper_bound、lower_bound
- opencv图像清晰度计算_收藏|分析君带你认识Python中的十大图像处理工具
- go 多线程并发 queue demo
- webpack中实现按需加载
- 【转】解决XMLHTTP获取网页中文乱码问题
- [转]Oracle字符串拼接的方法
- 用开源技术巧解代账公司开票据难题
- 用计算机给plc编程,plc编程用什么电脑?plc编程用什么配置电脑
- 从零开始学Java——基础篇
- Linux学习-菜鸟教程知识(一)
- 车牌识别EasyPR(2)——车牌颜色定位与偏斜扭转
- SQL判断某列中是否包含中文字符、英文字符、纯数字,数据截取
- 产品卖不出去?那你该学学向上销售和交叉销售了
- Java基础(自己总结)
- 朝着先能干活的方向努力。。。奥利给!!!06
- Web Caching(Web缓存)
- [MicroPython]TurniBit开发板DIY自动窗帘模拟系统
- 使用Laravel View Composers在视图之间共享数据
- office2016 下载直通车
热门文章
- python 清华镜像_树莓派raspberry4B入坑指南 part-1 virtualenv安装python
- 第一个android应用程序,深入学习Android 第一个应用程序
- nyoj 144小珂的苦恼(关于如何不定方程有整数解问题)
- nyoj810 贪心的嘿嘿(想弄死这出题的)
- 【UVA12304】2D Geometry 110 in 1!(外接圆/内切圆/切点等圆相关问题的模版题)
- Reading Digits(2016southeastern Europe. D题)题解
- java中跑批指的是什么_DB2几个问题的处理(三)
- badboy html5,html5_ol.htm
- python名词同义词只替换2个_用同义词替换句子中的每个单词的Python程序
- 机器人总动员中的小草_机器人总动员观后感(精选4篇)