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