einfachste Lösung ist @Resource
@Resource(name="bean1")
public void setBean(BeanType bean) {
}
Übrigens zu verwenden, @Qualifier
wird von ID auf Bohnen zur Verwendung mit @Autowired
zB
@Autowired @Qualifier("bean1")
public void setBean(BeanType bean) {
}
Bezug zu nehmen, wo bean1
die ID der ist Bean injiziert werden.
Siehe Spring manual:
Für einen Rückfall übereinstimmen, wird die Bohne Name eines Standard Qualifier Wert betrachtet. Daher können Sie die Bean mit der ID "main" anstelle des geschachtelten Qualifier-Elements definieren, was zu demselben Ergebnis führt. Obwohl Sie diese Konvention verwenden können, um auf bestimmte Beans mit Namen zu verweisen, handelt es sich bei @Autowired
grundsätzlich um eine typgetriebene Injektion mit optionalen semantischen Qualifizierern. Dies bedeutet, dass Qualifier-Werte, selbst wenn das Bean-Name-Fallback verwendet wird, innerhalb der Typenübereinstimmungen immer eine einschränkende Semantik aufweisen. Sie geben keinen Verweis auf eine eindeutige Bean-ID semantisch aus.
und
Wenn Sie beabsichtigen, Annotation gesteuerte Injektion von Namen zum Ausdruck bringen, nicht in erster Linie nicht @Autowired
verwenden, auch wenn technisch in der Lage sind zu einem Bean Namen durch @Qualifier
Werte Bezug genommen wird. Verwenden Sie stattdessen die Annotation JSR-250 @Resource
, die semantisch definiert ist, um eine bestimmte Zielkomponente anhand ihres eindeutigen Namens zu identifizieren, wobei der deklarierte Typ für den Abgleichsprozess irrelevant ist.
Ich bevorzuge @Resource
, es ist sauberer (und nicht Frühling-spezifisch).
Hmm ... dann muss ich etwas falsch gemacht haben, weil @Qualifier keine Bohnen findet. '@ Resource' funktioniert aber. Können Sie überprüfen, ob '@ Qualifier' wirklich für IDs funktioniert? Laut den Dokumenten benötigt es ein '' Element in der Bean. –
@Aaron: Die Verhaltensweisen jedes Ansatzes sind tatsächlich subtil unterschiedlich. Wenn '@ Qualifier' mit' @ Autowired' verwendet wird, wird das Qualifikationsmerkmal verwendet, um die Optionen einzuschränken, die von '@ Autowired' präsentiert werden, während' @Ressourcen' explizit eine Bean nach Namen auswählt. – skaffman
@Aaron: Siehe bearbeiten – skaffman