java - spring boot循环依赖设计问题

标签 java spring database-design circular-dependency

是的,又是这个问题...

我设计了一个批处理系统,它调用 ActionService 的通知方法,在通知方法内,根据调用方式,调用创建批处理服务的方法。

示例代码块如下所示;

@Service
public class BatchService{
  private final BatchRepository batchRepository;
  private final ActionService actionService;

  public Batch create(Batch batch){
     return batchRepository.save(batch);
  }

  public void triggerNotifiers(){
     ...
     actionService.notify(...);
     ...
  }
} 


@Service
public class ActionService{
  private final ActionRepository actionRepository;
  private final BatchService batchService;

  public void notify(...){
     ...
     if(/*some special cases*/)
         batchService.create(...);
     ...
  }
} 

批处理服务的功能是调用Action服务的notify方法。 操作服务可以根据传入的通知数据创建 future 的通知程序。

所以他们非常依赖彼此。

您认为是否有更好的方法/逻辑/设计来做到这一点?

最佳答案

在写题的时候,我想出了一个办法:

@Component
public class Batch{
  private final BatchService batchService;
  private final ActionService actionService;

  public void triggerNotifiers(){
     ...
     batchService.findProperBatch(...);
     actionService.notify(...);
     ...
  }
} 

@Service
public class BatchService{
  private final BatchRepository batchRepository;

  public Batch create(Batch batch){
     return batchRepository.save(batch);
  }

  public Batch findProperBatch(...){
     ...
     return batch;
  }

} 

@Service
public class ActionService{
  private final ActionRepository actionRepository;
  private final BatchService batchService;

  public void notify(...){
     ...
     if(/*some special cases*/)
         batchService.create(...);
     ...
  }
} 

如果您有更好/替代的解决方案,请不要犹豫,分享您的想法。

关于java - spring boot循环依赖设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62233522/

相关文章:

java - 在 Java 中,如何根据方法的情况返回 String 或 double?是否可以?

java - 如何在 Mac OS 10.5.8 上运行的 Tomcat/java 上设置 UTF8 语言?

spring - Spring RMI 出现错误

mysql - 如何将层次信息存储到数据库中?

database-design - 优化模式以捕获出勤数据的最佳方法是什么

mysql - 跟踪如何获取 BOM 及其子 BOM( Material list )的过程

java - 如何修复此表达式计算器中的错误?

java - 从属性文件中读取 Maven SCM url 值

java - 从 JPA 嵌入表中的 POST 访问表单数据

java - GenericDAO + Spring + JPA2 没有独特的 bean