私はx、y、zという3つのクラスを持っています。 xはzのメソッドを呼び出すyの関数を呼び出し、メソッドが同じメソッドで実行された直後に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égoiredone。 –