Spring Java-Konfiguration - wie eine Karte erstellen des enums zu Bohnen-Referenzen
mit Java-basierten Konfiguration, die ich versuche zu konvertieren, eine Karte, die Karten enums zu bean-Referenzen werden in reinen java-config (derzeit in XML & arbeitet), aber kann nicht scheinen, etwas zu finden, in die Dokumentationen;
Derzeit ist meine XML-wie so;
<util:map id="colourHanders" key-type="com.example.ColourEnum"
value-type="com.example.ColourHandler">
<entry key="white" value-ref="whiteColourHandler"/>
<entry key="blue" value-ref="blueColourHandler"/>
<entry key="red" value-ref="redColourHandler"/>
</util:map>
Ich bin sicher, es ist leicht, aber wieder, können nicht finden, nichts über das Thema, wie Sie repräsentieren diese in Java (so dass ich nicht jede XML-Konfigurations-Dateien)..
Hinweis; die ColourHandler
Bohnen werden erstellt unter Verwendung der @Component-annotation, e.g..
@Component
public class RedColourHandler implements ColourHander{
.....
}
und die Karte der colourHandlers wird verwiesen;
@Resource(name="colourHandlers")
private Map<ColourHandlerEnum, ColourHandler> colourHandlers;
Dank,
Ian.
InformationsquelleAutor der Frage Ian | 2012-11-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Möchten Sie wahrscheinlich so etwas wie dieses:
Wenn Sie benötigen, um Ihre Handler
@Component
s, dann können Sie autowire Sie in der configuration-Klasse:InformationsquelleAutor der Antwort hertzsprung
Dies ist eigentlich ziemlich einfach, aber Sie müssen wissen, wie:
Der trick ist, dass Sie injizieren Bohnen in eine config.
InformationsquelleAutor der Antwort Aaron Digulla
Ähnlich wie die akzeptierte Antwort, außer, dass anstelle von autowiring-Komponenten, Sie können erklären, die Bohnen in die configuration-Klasse wie gewohnt auf und übergeben Sie Sie als argument an die Karte bean-Methode:
Beachten Sie auch, dass die Injektion von der Karte als ein @Resource, muss dann nicht die annotation "name" - parameter, wenn das Feld, folgt die gleiche Namenskonvention wie der bean-definition.
d.h. Dieser würde ohne parameter "name":
aber dies würde erfordern:
InformationsquelleAutor der Antwort SimonSparks
Da Sie bereits eine einzigartige Klasse/@Komponente für jede ColorHandler, würde ich nur lassen Sie den Frühling herausfinden, was zu verwenden (keine Notwendigkeit für @Autowire Injektion noch zusätzliche Schaffung Methoden):
InformationsquelleAutor der Antwort inor