如何在 Java 中恢复循环依赖关系



我有 3 个类,即 x、y 和 z.x 调用 y 的函数,它调用 z 的方法,在该方法以相同的方法执行后,我必须立即调用 x 的函数。这反过来又会导致在进行依赖注入时产生无休止的循环依赖关系。

如何解决这个问题?有什么办法吗?

事件服务类(X 类)

    private void callHandlers(ApplicationEvent event) {
            ChecklistEventHandler handler = new ChecklistEventHandler();
            handler.handle(event); // here class Y is getting called.
    }
    public void createEvent(String type, String key, String creator, Map<String, Object> data) {
        AccountInfo accountInfo = (AccountInfo) Http.Context.current().args.get(GtConstants.ACCOUNT_INFO);
        String eventData = JacksonUtil.toString(data);
        ApplicationEvent event = new ApplicationEvent(accountInfo.getSchemaName(), type, key, creator, eventData);
        repository.save(event);
        scheduleForProcessing(event,accountInfo);
    }

ChecklistEventHandler 类(类 Y)

 public void handle(ApplicationEvent event) {
    ChecklistCriteria checklistCriteria = new ChecklistCriteria();
    checklistCriteria.setEventType(event.getType());
    checklistCriteria.setArchived(false);
    taskManagementService.createChecklistInstancesAndTask(event, checklistCriteria); // here class Z is getting called.
 }

任务管理服务类(Z 类)

 public void createChecklistInstancesAndTask(ApplicationEvent event, ChecklistCriteria checklistCriteria) {
    List<Checklist> checkListCollection = getChecklistCollectionBasedOnEvent(checklistCriteria.getEventType(),
            checklistCriteria.getArchived(),
    LocalDate now = LocalDate.now();
    createChecklistInstancesAndTask(event, checkListCollection, now); 
      //here i am calling EventService class (class X)            eventService.createEvent(TaskConstants.EventType.COMPLETE_CHECKLIST_INSTANCE,
String.valueOf(checklistInstance.getId()),   TaskConstants.EventCreator.TASK_STATUS_UPDATOR, taskMap);
}

希望这能消除您的疑虑。现在我如何在不替换 X 和 Y 类函数的情况下重新设计它。Z类可以摆弄。

为了解决循环依赖关系,您需要定义一个终止条件。问问自己,需要满足什么条件才能使代码开始在已定义的递归路径以外的路径上执行。所以

private void A(){ 
     B()    
}
private void B(){
     C();
}
private void C(){
     if(conditionD){
          D();
     }else{
          A();
     }
}

最新更新