Spring框架通过三级缓存和AOP(面向切面编程)解决循环依赖问题。
1、三级缓存:Spring在容器中维护了三个不同的Bean生命周期对象的Map,分别是singletonObjects、earlySingletonObjects和prototypeObjects,当创建一个Bean时,Spring会先检查这三个Map中是否已经存在该Bean的实例,如果存在则直接返回,避免了循环依赖的问题。
2、AOP(面向切面编程):Spring支持AOP,可以通过代理方式实现对目标对象的访问,当存在循环依赖时,Spring会自动将其中一个Bean的实例注入到另一个Bean的属性中,然后通过AOP代理的方式访问这个属性,从而解决了循环依赖的问题。