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
相关产品推荐
相关产品推荐

