我有3类,即X,Y和Z。 x调用y的函数调用z的方法,并立即在方法得到执行后,我必须调用x的函数。这反过来导致依赖注入时产生无限的循环依赖。如何在Java中消除循环依赖关系?
如何解决这个问题?任何方式呢?
EventService类(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.
}
TaskManagementService类(类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可以摆弄。
显示确切的代码,让我们了解您的缺陷是。 –
重新排列你的代码,以便你不再有循环依赖。具有循环依赖性是您设计中出现问题的迹象,并且您的类之间的耦合过于紧密。 – Jesper
@OlivierGrégoire完成。 –