2010-01-04 6 views
6

Wir wissen im Frühling <Bean> hat ein Attribut "primär", um anzuzeigen, dass eine Bean der erste Kandidat ist, wenn mehrere Beans verfügbar sind, die autowired werden sollen Ein Besitz.Kann ich Annotation nicht verwenden, um anzugeben, dass eine Bean eine primäre Bean ist

Aber jetzt alle meine Bean-Definition sind mit @ Component/@ Service, etc. deklariert, kann ich nicht finden, die entsprechenden "primären" Attribut, das ich verwenden kann, um eine Bean zu deklarieren.

Bitte beraten Sie, wie kann ich dies erreichen, danke.

Antwort

22

Im Frühjahr 3.0 verwenden Sie @Primary.

Zeigt an, dass eine Bohne der Vorzug gegeben werden sollte, wenn mehrere Kandidaten qualifiziert sind, eine einwertig Abhängigkeit autowire. Wenn genau eine "primäre" Bean unter den Kandidaten existiert, wird es der Wert autowired sein.

Kann in jeder Klasse direkt verwendet werden oder indirekt mit Component oder auf Methoden kommentiert mit Bean kommentiert.

Die Verwendung von Primary auf Klassenebene hat keine Auswirkung, es sei denn, die Komponentenabtastung ist wird verwendet. Wenn eine Klasse mit primärer Annotation über XML deklariert wird, werden die primären Annotationsmetadaten ignoriert und stattdessen <bean primary="true|false"/> wird berücksichtigt.

Siehe ref docs.

+0

Dank Ich habe auf Frühjahr 3.0 aktualisiert, es funktioniert jetzt gut. – Matt

+0

sieht aus wie Ihre Ref Doc ist gestorben. Das könnte besser sein: http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/Primary.html –

+0

@jb. Danke, behoben – skaffman

4

Die @Primary-Annotation funktioniert nur, wenn Sie Spring 3.0 verwenden.

Im Frühling 2.5 gibt es keine entsprechende Annotation für das primäre Attribut. Sie müssen die Annotation @Qualifier verwenden, um anzugeben, welche Bean injiziert werden soll. Eine weitere Möglichkeit besteht darin, für denselben Zweck Ihre eigene Annotation für Qualifier zu definieren.

Weitere Informationen finden Sie unter docs.