返回 Bug 清单
BUG-0358project-13中已修复backend-logic

服务类多构造器注入歧义 —— Spring 选错构造器导致依赖未装配

发现:2026-10-01验证:2026-10-09置信度:90%

症状

服务实例化后关键依赖为空,调用时报 NPE 或行为异常;单构造器时无此问题,新增便捷构造器后触发。

根因

类有多个构造器时 Spring 4.3+ 的『唯一构造器免注解』规则失效,默认选无参或报歧义——不会自动挑选你想要的那个。

修复方案

在主构造器上标 @Autowired(或只保留一个构造器)。code review 规则:给已有服务加重载构造器 = 高危操作,必须同步检查注入行为。 [交叉引用·2026-10-03] 本条与 BUG-DS-3e67116d(slug=project-13-bug-0236)主题重叠:同属「服务类多构造器导致 Spring 注入歧义」。区别:BUG-DS-3e67116d 以 LlmGatewayService 为实例并给出 @Autowired 消歧的具体修复;本条记录该模式在其它服务上的复现与排查路径。两者保留为独立条目,请勿删除任一条。

检测命令

grep -rn 'public <ServiceClass>(' --include='*.java' | awk 计数 > 1 且无 @Autowired 即命中

错误签名

LlmGatewayService 存在多个构造器,Spring 无法确定用哪个 → 依赖注入失败/字段为 null

技术信息

来源项目

project-13

涉及文件

LlmGatewayService.java

标签

spring, autowired, constructor-injection, multiple-constructors, related-bug:project-13-bug-0236