fix(iot): B7 BranchNode @Lazy 注入 NodeProviderRegistry 打破循环依赖

启动失败:Spring 检测到环形依赖
  nodeProviderRegistry → branchNode → nodeProviderRegistry

根因:BranchNode 既是 NodeProvider(被 Registry 收集),又依赖 Registry
dispatch 子节点 — 典型 "collect vs dispatch" 死结。

修复:构造参数加 @Lazy,Spring 注入代理,首次方法调用才解析 Registry,
构造阶段打破环。运行期行为等价。

rule 模块 177/177 测试全绿。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
lzh
2026-04-24 14:35:30 +08:00
parent ce2e6cc32a
commit 4f89b49e5a

View File

@@ -10,6 +10,7 @@ import com.viewsh.module.iot.rule.engine.NodeProviderRegistry;
import com.viewsh.module.iot.rule.engine.NodeResult;
import com.viewsh.module.iot.rule.engine.RuleContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import java.util.List;
@@ -52,7 +53,7 @@ public class BranchNode implements NodeProvider {
private final BranchExecutor branchExecutor;
public BranchNode(ConditionEvaluatorManager conditionEvaluatorManager,
NodeProviderRegistry nodeProviderRegistry) {
@Lazy NodeProviderRegistry nodeProviderRegistry) {
this.conditionEvaluatorManager = conditionEvaluatorManager;
this.nodeProviderRegistry = nodeProviderRegistry;
this.branchExecutor = new BranchExecutor(conditionEvaluatorManager);