在 Spring 中,若创建 Bean 发生解决循环依赖会通过三级缓存解决。
singletonObjects(一级缓存):存放 完整 的 Bean 对象;earlysingletonObjects(二级缓存):存放 Bean 的 早期(early)对象;singletonFactories(三级缓存):存放 Bean 的 工厂(Factory)对象;// Spring 源码中的定义(AbstractBeanFactory)
/** 一级缓存:存放完全初始化好的 bean(成品豆) */
private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);
/** 二级缓存:存放早期暴露的半成品 bean(已经实例化但还没完成属性填充和初始化) */
private final Map<String, Object> earlySingletonObjects = new HashMap<>(16);
/** 三级缓存:存放的是 ObjectFactory,代表正在创建中的 bean 的工厂(用于解决 AOP 代理问题) */
private final Map<String, SingletonBeanRegistry> singletonFactories = new HashMap<>(16);

Spring 循环依赖导致启动报错
spring.main.allow-circular-references=true
@Lazy 注解,在@Autowired 地方增加即可@Autowired
@Lazy
private PayChannelServiceFactory payChannelServiceFactory;