Spring 是如何解决循环依赖

循环依赖的问题其实是两个或多个 Bean 相互依赖,形成一个闭环。

spring通过三级缓存解决循环依赖,第一级缓存是单例池,二级缓存存放创建出来但还没有初始化的对象,对象创建的中间状态,对象初始化的时候,如果在一级缓存没有找到,就会到二级缓存找。通过先加载一个没有初始化的对象的方式,让初始化方法不会同时进行。

spring除了正常的对象还有动态代理对象,动态代理对象的中间状态存放在第三级缓存。

spring无法解决通过构造函数循环依赖的问题,可以用@Lazy,使构造函数不同时进行来解决。

更新 2025年5月6日