返回 Bug 清单
BUG-0342project-47高已修复backend-logic
服务间构造注入成环 —— 事件驱动拆解循环依赖,删掉中间层接口
发现:2026-10-01验证:2026-10-09置信度:90%
症状
审批流转里要同步触发知识共享逻辑,知识共享又要回调审批状态,三个服务互相注入成环;扩一个功能就绕一圈改三个类。
根因
同步双向调用把三个生命周期绑死在一起。环本身是设计问题:『审批通过』这个事实应该被广播,而不是被某个下游服务『拉取』。
修复方案
事件驱动重构:
1) 定义领域事件 ApprovalApprovedEvent(携带审批上下文快照);
2) 审批流只负责 ApplicationEventPublisher.publish(event),不再知道谁消费;
3) 知识共享等下游用 @EventListener 各自订阅,出结果后再发 ApprovalExecutionResult 反向解耦;
4) 删除只为绕环而存在的中间层接口(ApprovalExecutor)。
判据:依赖图无环;每个服务单独 mock 事件可测。
检测命令
grep -rn 'ApplicationEventPublisher' --include='*.java' -l # 及新功能 code review 检查注入环错误签名
ApprovalWorkflowService ↔ ApprovalExecutorService ↔ KnowledgeShareService 循环注入;启动报 BeanCurrentlyInCreationException(或仅靠三级缓存勉强启动)技术信息
来源项目
project-47
涉及文件
ApprovalWorkflowService.java, ApprovalApprovedEvent.java, KnowledgeShareService.java
标签
circular-dependency, event-driven, domain-event, architecture