Просмотр исходного кода

fix(backend): 打破 MembershipService↔VirtualPayService 循环依赖

MembershipService.createOrder → VirtualPayService.generateMembershipPayParams → MembershipService
在启动期强制互相实例化导致 Spring Boot 2.7 拒绝启动(循环依赖默认禁止)。

解决方案:在 MembershipService 的 VirtualPayService 注入点加 @Lazy,
启动期注入代理,运行时才解析真实 bean,打破循环。

参考:Spring 5.3 的 ResourceElement 支持 lazyLookup,与 @Resource 兼容。
iwt 2 месяцев назад
Родитель
Сommit
009f40aa7d

+ 5 - 0
cfc-backend/src/main/java/com/etotem/cfc/service/MembershipService.java

@@ -10,6 +10,7 @@ import com.etotem.cfc.mapper.*;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -62,7 +63,11 @@ public class MembershipService implements MembershipServiceInterface {
     @Resource
     private VirtualGoodsConfigService virtualGoodsConfigService;
 
+    // @Lazy 打破 MembershipService ↔ VirtualPayService 循环依赖:
+    // MembershipService.createOrder → VirtualPayService.generateMembershipPayParams → MembershipService.getByOrderNo,
+    // 运行时才解析代理,启动期不再强制互相实例化
     @Resource
+    @Lazy
     private VirtualPayService virtualPayService;
 
     @Resource