面试阿里,腾讯,字节跳动90%都会被问到的Spring中的循环依赖
前言 Spring中的循环依赖一直是Spring中一个很重要的话题,一方面是因为源码中为了解决循环依赖做了很多处理,另外一方面是因为面试的时候,如果问到Spring中比较高阶的问题,那么循环依赖必定逃不掉。如果你回答得好,那么这就是你的必杀技,反正,那就是面试官的必杀技,这也是取这个标题的原因,当然,本文的目的是为了让你在之后的所有面试中能多一个必杀技,专门用来绝杀面试官! 本文的核心思想就是, 当面试官问: “请讲一讲Spring中的循环依赖。”的时候, 我们到底该怎么回答? 主要分下面几点 什么是循环依赖? 什么情况下循环依赖可以被处理? Spring是如何解决的循环依赖? 同时本文希望纠正几个目前业界内经常出现的几个关于循环依赖的错误的说法 只有在setter方式注入的情况下,循环依赖才能解决(错) 三级缓存的目的是为了提高效率(错) OK,铺垫已经做完了,接下来我们开始正文 什么是循环依赖? 从字面上来理解就是A依赖B的同时B也依赖了A,就像下面这样 体现到代码层次就是这个样子 @Component public class A { // A中注入了B @Autowired private B b; } @Component public class B { // B中也注入了A @Autowired private A a; } 当然,这是最常见的一种循环依赖