2017-01-26 9 views
1

я застрял с следующим вопросом:Циркулярная зависимость весенней инъекции - это плохая конструкция?

Я пытаюсь создать бобы следующим образом:

@Bean 
public abc createABC() { 
    return new ABC(--, def(),--); 
} 

`

@Bean 
public DEF def() { 
    return new DEF(--, createABC(),-- 
} 

Любые предложения, чтобы обойти эту проблему без chaging для сеттер инъекции на основе , Является ли это показателем плохого дизайна? В моей ситуации эта зависимость обязательна. Просьба указать ваши точки зрения по этому вопросу

+0

Выход из системы основан на установке. В конце дня вам нужно создать один бонус за другим. Независимо от того, что вы создаете, сначала не может быть передан другой в вызове конструктора. – Henry

+0

@Jim Garrison OP также хочет знать, плохо ли это. Можете ли вы указать мне ответ в дубликате, который объясняет, свидетельствует ли это о плохом дизайне? Хотя в этом вопросе речь идет о весенних и циклических зависимостях, это не дубликат, поскольку ОП четко заявляет, что он не хочет прибегать к инъекции на основе сеттера. Можете ли вы пересмотреть право вето на закрытие вопроса? – CKing

+0

Вы должны использовать инъекцию на основе сеттера, так как сначала необходимо создать объекты, а затем ввести ссылки взаимной зависимости. Это невозможно сделать во время строительства. –

ответ

4

это показатель плохой конструкции?

Абсолютно. Если ABC зависит от DEF и DEF зависит от ABC, это косвенно означает, что ваш код не был организован правильно. Такие циклические зависимости обычно указывают на то, что вы не придерживаетесь принципа единственной ответственности .

ABC имеет логику, которую должен иметь CDE, и наоборот. Вы должны реорганизовать эти классы таким образом, чтобы либо ABC зависит от CDE, либо CDE зависит от ABC, но не обоих.