如何通俗易懂地解释循环依赖?(理论+源码)


说起Spring,通常面试官都会问循环依赖怎么解决?
如果你没看过Spring IoC的相关源码,也不必惊慌,听我娓娓道来!
其实,解决循环依赖并没有想像得那么困难。
Spring IoC是干什么事的,你肯定知道,无非就是创建Bean放到IoC容器中,至于这个容器是什么,你也不必太Care。
既然,要解决循环依赖,那肯定存在着依赖,我们假设有两个类:
A和B,A->B,B->A,且二者是通过@Autowired相互注入的。
既然,要解决循环依赖,那肯定存在着依赖,我们假设有两个类:
A和B,A->B,B->A,且二者是通过@Autowired相互注入的。
在这种情况下,Spring会通过以下步骤来解决循环依赖问题:
- 在实例化对象之前,先创建一个临时的代理对象,并将其放入缓存中。
- 在属性注入等其他BeanPostProcessor执行之前,将这个代理对象作为早期引用放入singletonFactories中。
- 当getBean方法再次被调用时,如果发现singletonFactory中存在该bean的早期引用,则直接返回该早期引用,而不是重新创建新的实例。

在这金三银四的季节,栈长为大家准备了四份面试宝典:
- 《java面试宝典5.0》
- 《Java(BAT)面试必备》
- 《350道Java面试题:整理自100+公司》
- 《资深java面试宝典-视频版》
- 大量电子书籍
分别适用于初中级,中高级,以及资深级工程师的面试复习。
内容包含java基础、javaweb、各个性能优化、JVM、锁、高并发、反射、Spring原理、微服务、Zookeeper、数据库、数据结构、限流熔断降级等等。
