返回 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