You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中结合@RequiredArgsConstructor解决循环依赖问题

Spring Boot循环依赖与@RequiredArgsConstructor结合@Lazy的问题

问题场景

开发Java Spring Boot约会APP服务时,存在点赞表和点踩表,需要在操作前检查用户是否已有过互动(点赞/点踩),若有则抛出异常。初始设计的服务类出现循环依赖问题。

初始代码

@Service
@RequiredArgsConstructor
public class LikeService {
    private final DislikeService dislikeService;
    public void method() {
        // 检查是否有点踩记录,然后保存点赞
    }
}

@Service
@RequiredArgsConstructor
public class DislikeService {
    private final LikeService likeService;
    public void method() {
        // 检查是否有点赞记录,然后保存点踩
    }
}

上述代码会直接触发循环依赖错误。

尝试的解决方案及问题

尝试通过@Lazy注解延迟加载依赖来解决,但直接在字段上添加@Lazy会被忽略:

@Service
@RequiredArgsConstructor
public class LikeService {
    @Lazy
    private final DislikeService dislikeService;
}

核心疑问:能否在使用@RequiredArgsConstructor时,只为特定字段添加@Lazy,让生成的构造器如下所示?

public LikeService(final RandomService randomService, final AnotherService anotherService, @Lazy final DislikeService dislikeService) {
    this.randomService = randomService;
    this.anotherService = anotherService;
    this.dislikeService = dislikeService;
}

排除的方案

不考虑使用中介服务方案(比如创建包含点赞和点踩服务的互动服务),原因是该方案无法避免其他服务直接调用点赞/点踩方法,跳过互动服务中的校验逻辑。

补充说明

已决定合并点赞与点踩表,用枚举区分互动类型。本次提问仅为应对未来类似问题,出于纯粹技术兴趣。

内容的提问来源于stack exchange,提问作者Piccolo Namek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:59:57