Ich habe ein Spring-Projekt, das ~ 50 Komponenten enthält. Leider verursachte eine der Klassen ein Problem der zyklischen Abhängigkeit in Maven. Hier ist die Geschichte:Maven zyklische Abhängigkeitsproblem für Spring-Projekt
Ich habe eine neue Komponente zu meinem Spring-Projekt hinzugefügt. Nennen wir es Apple
für jetzt. Es hat eine @Bean
namens AppleWatch
. Einer der Implementierungen war, dass Apple
lebte (abhing) auf eine andere Komponente: Foxconn
, so dass AppleWatch
ein Verfahren in einem Bean CheapLabor
genannt nennen könnte.
Bei der Zwischenzeit CheapLabor
auf einer anderen Komponente abhängig: Corning
. Es brauchte GorillaGlass
um Überstunden leisten zu können.
Dinge waren ziemlich gut bis zu dem Moment Corning
erkennt, dass es, indem die ähnliche Menge an Gläsern nach dem Apples Markt Notwendigkeit, Geld sparen will. So versucht es, eine Methode getCurrentMarketOrders()
in AppleWatch
aufzurufen. Um dies zu tun, habe ich die Bohne AppleWatch
in die Klasse GorillaGlass.java
autowired. Dann ...
Boom! Zyklischer Abhängigkeitsfehler!
Also, jeder Vorschlag auf, was soll ich tun, für Apple
und/oder Corning
?
Der übliche Rat wäre, sich auf Schnittstellen anstatt auf Implementierungen zu verlassen - ich vermute, das würde hier helfen. Denken Sie auch über die Richtung Ihrer Abhängigkeiten nach ... zum Beispiel kann ich eine Uhr sehen, die von einem Glaskristall abhängt, aber nicht umgekehrt. Es hört sich an, als ob deine GorillaGlass-Klasse irgendwie von AppleWatch abhängig ist - macht mich am Kopf kratzen, aber vielleicht verstehe ich das Problem einfach falsch. – unigeek
Ist das ein Build-Time-Fehler oder ein Laufzeitfehler (einschließlich Komponententests)? –
@unigeek Ich stimme zu. Die Struktur des Projekts entsprechend neu zu gestalten, löst das Problem sicher.Aber es stellte sich heraus, dass ich die Struktur nicht ändern konnte, ohne meinen Chef/meine Kollegen verrückt zu machen. Es gibt viele Ansätze, um zyklische Abhängigkeitsprobleme zu lösen. Ich habe es mir doch ausgedacht: Die Logik von "Corning" zu ändern, hängt davon ab, dass "Apple" Teil von "Apple" ist: Statt benötigte Informationen von "Apple" zu bekommen, bekommt "Coring" nun diese Informationen von "Foxconn" , die die Methode von 'Apple' aufruft. Es bricht den Kreis zu 'Apple' ->' Foxconn' -> 'Corning'. Nicht der beste Zug, aber es hat funktioniert. –