Wir haben beschlossen, Dependency Injection mit JSR-330-Annotationen für unsere zukünftigen Modularisierungsbemühungen zu verwenden, und waren sehr zufrieden mit dem ersten Ergebnis, das auf Guice 2 SVN basiert.
Jetzt müssen wir sicherstellen und dokumentieren, dass die von uns benötigten Konstruktionen auch in Spring funktionieren, wenn sie programmgesteuert konfiguriert werden (wir wollen dieselbe Refactoring-Unterstützung wie mit Guice, also keine XML-Dateien). Ich habe Probleme mit @Provider
und @Inject @Named("foo") String
, aber ich habe einfach @Inject
arbeiten mit:
Dabei ist LIBL_Object die Basisklasse, in die in injiziert werden soll, aber der CORE_Provider registriert sich nicht wie erwartet innerhalb von Spring.
Die Implementierung von CORE_Provider ist
%Vor%und ich möchte es in
injiziert werden %Vor%Wir haben auch festgestellt, dass wir die Konfigurationswerte sehr übersichtlich mit dem Tag @Named übergeben können. Dieser Code sieht folgendermaßen aus:
%Vor%wo wir dann diese Zeichenfolge mit Guice mit
registrieren können %Vor%Also sind die zwei Fragen:
@Provider
Klasse mit Spring 3 programmatisch? Die kurze Antwort ist: Es gibt keine programmatische Konfiguration von Spring.
Trotz der Tatsache, dass Spring und Guice JSR-330 API unterstützen und Spring jetzt ohne XML konfiguriert werden kann, sind ihre Ideologien immer noch sehr unterschiedlich. Spring beruht auf statischer Konfiguration, entweder in Form von XML-Dateien oder mit Anmerkungen versehenen Java-Klassen. Daher kann der einfache Versuch, die Guice-Konfiguration an Spring anzupassen, Schwierigkeiten bereiten.
Zum Problem mit Provider
- Spring unterstützt javax.inject.Provider
nicht auf die gleiche Weise wie toProvider()
binding in Guice (übrigens ist diese Verwendung von Provider
in JSR-330 Dokumenten nicht angegeben) . Daher können einige Spring-spezifische Anmerkungen erforderlich sein, z. B.
Der von außen kommende Bindungswert kann aufgrund der Statik der Federkonfiguration schwierig sein. In Ihrem Fall kann dies beispielsweise so gemacht werden:
%Vor%