Wie konfiguriere ich JSR-330 @Provider und @Inject @Named ("foo") String ** programmgesteuert ** im Frühjahr?

9

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:

gemacht %Vor%

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:

  • Wie registriere ich die @Provider Klasse mit Spring 3 programmatisch?
  • Wie registriere ich eine String-Konstante mit Spring 3, so dass @Named sie richtig auswählt?
Thorbjørn Ravn Andersen 03.01.2011, 10:43
quelle

1 Antwort

5

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.

%Vor%

Der von außen kommende Bindungswert kann aufgrund der Statik der Federkonfiguration schwierig sein. In Ihrem Fall kann dies beispielsweise so gemacht werden:

%Vor%     
axtavt 03.01.2011, 14:32
quelle

Tags und Links