public BService(@Lazy AService aService) { ... }
# 或改成 @Autowired 的 setter 注入

启动报 BeanCurrentlyInCreationException 并提示 requested bean is currently in creation,两个 Service 都用构造器注入对方,改成字段注入却能起来。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:构造器注入在实例化阶段就要拿到对方,三级缓存只处理属性注入,对象还没造完就被要求注入,只能报错。

「构造器循环依赖」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

处理上按这个顺序:在其中一个构造参数上加 @Lazy;或改用 setter 注入打破实例化顺序;确认拿到的是延迟初始化的代理。

确认没问题再收工,启动日志不再出现该异常,两边方法调用都正常。

作者 9823189