前几天在阿粉CSDN上看了一篇文章。因为一个spring的问题,本来30000的工资被压到25000,25000没人要。让我觉得Spring不学Spring就吃亏了,那我们就从各种高频访谈开始深入吧。本文以一道高频面试题入手!以后阿粉会给大家带来关于Spring的各种知识。希望大家一起探讨一下Spring是如何解决循环依赖的。1、什么是循环?靠这个词,阿粉一听,肯定和大家一样的反应,循环,靠,是不是A引用了B,而此时B引用了C,C又引用了A,所以一个三角形的A爱关系出现。那么如何用代码来表达呢?publicclassClassTestA{privateClassTestBclassTestB;publicvoida(){classTestB.b();}publicClassTestBgetClassTestB(){returnclassTestB;}privatevoidsetClassTestB(ClassTestBclassTestB){this.classTestB=classTestB;}}publicclassClassTestB{privateClassTestCclassTestC;publicvoidb(){classTestC.c();}publicClassTestCgetClassTestC(){returnclassTestC;}privatevoidsetClassTestC(ClassTestCclassTestC){this.classTestC=classTestC;}}publicclassClassTestC{privateClassTestAclassTestA;){returnclassTestA;}privatevoidsetClassTestA(ClassTestAclassTestA){this.classTestA=classTestA;}}2.循环依赖会出现什么问题在阿芬的印象中,循环依赖最直接的问题就是会出现在对象的实例化上,创建Object,如果在Spring配置中加入这种A依赖B,B依赖C,C依赖A,那么最后创建A的实例对象时,就会报错。而如果这种循环调用的依赖不终止他,那么就相当于死循环,就像阿芬前几天在维护那个“十六年前”的项目时,各种内存溢出,说着心里很郁闷。在Spring中,循环依赖的处理也分为几种不同的情况。阿芬带你去看看。3.spring循环依赖处理(constructorcyclicdependency)constructor循环依赖的意思就是构造和注入形成的循环依赖,这种依赖,没办法解决,敢强求,千万别't的意思是,当你久违的异常BeanCurrentlyInCreationException出现时,就意味着循环依赖问题。相信大家在出现异常的时候,不明白为什么的时候,第一时间复制异常信息,放到百度或者谷歌上查一下。BeanCurrentlyInCreationException放在百度上,一目了然。在Spring的配置文件中,如果这样配置A、B、C的循环依赖,创建A的时候发现构造函数需要类B,然后创建B,创建B的时候发现说你需要C,然后去创建C,创建的时候发现需要A,于是又转了一圈,这样就形成了一个闭环,没办法创建。
