2017-01-26 6 views
1

Ich bin mit folgenden Ausgabe fest:Kreisabhängigkeit im Frühjahr Injektion - Ist das schlechtes Design?

Ich versuche, Bohnen wie folgt zu erstellen:

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

`

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

Irgendwelche Vorschläge, um dieses Problem zu bekommen, ohne Basis Injektion Setter chaging zu . Ist es ein Hinweis auf schlechtes Design? In meiner Situation ist diese Abhängigkeit notwendig. Bitte geben Sie Ihre Standpunkte zu diesem

+0

Der Ausweg ist Setter basierte Injektion. Am Ende des Tages müssen Sie eine Bohne nach der anderen erstellen. Was immer Sie zuerst erstellen, kann nicht den anderen im Konstruktoraufruf übergeben haben. – Henry

+0

@Jim Garrison Das OP möchte auch wissen, ob das schlechte Design ist. Können Sie mich auf eine Antwort in dem Duplikat hinweisen, die erklärt, ob dies ein Hinweis auf schlechtes Design ist? Während diese Frage über Feder- und zyklische Abhängigkeiten spricht, handelt es sich nicht um ein Duplikat, da das OP eindeutig angibt, dass er nicht auf eine setzerbasierte Injektion zurückgreifen möchte. Können Sie das Veto beim Schließen der Frage noch einmal überdenken? – CKing

+0

Sie müssen die Setter-basierte Injektion verwenden, da Sie zuerst die Objekte erstellen und dann die gegenseitigen Abhängigkeitsreferenzen einfügen müssen. Dies kann nicht zur Konstruktionszeit erfolgen. –

Antwort

4

es der Hinweis auf schlechtes Design?

Absolut. Wenn ABC von DEF abhängt und DEF von ABC abhängt, bedeutet dies indirekt, dass Ihr Code nicht richtig organisiert wurde. Solche zyklischen Abhängigkeiten zeigen normalerweise an, dass Sie nicht das Prinzip der einfachen Verantwortung einhalten.

ABC hat Logik, die CDE haben sollte und umgekehrt. Sie sollten diese Klassen so refactorisieren, dass entweder ABC von CDE oder CDE abhängig ist von ABC aber nicht beides.

Verwandte Themen