web-dev-qa-db-fra.com

Câblage à ressort automatique par nom à l'aide d'annotations

Dans la dernière version de Springs, nous pouvons câbler automatiquement un bean en utilisant l'annotation comme @Autowired. Cela câblera automatiquement le bean en utilisant son type (ou constructeur, s'il est appliqué dessus). Existe-t-il un moyen d'utiliser le @Autowired annotation basée sur le nom du bean que nous faisions sans annotation dans le fichier XML de Spring comme autowire = "byName"?

48
Anand

Vous pouvez utiliser JSR-250 @Resource pour le câblage automatique du bean par nom, sauf si vous avez besoin d'une injection de constructeur ou d'une méthode multi-paramètres.

De la documentation:

Si vous avez l'intention d'exprimer l'injection basée sur des annotations par nom, n'utilisez pas principalement @Autowired, même s'il est techniquement capable de faire référence à un nom de bean via les valeurs @Qualifier. À la place, utilisez l'annotation JSR-250 @Resource, qui est définie sémantiquement pour identifier un composant cible spécifique par son nom unique, le type déclaré n'étant pas pertinent pour le processus de correspondance.

46
soulcheck

Vous pouvez utiliser:

@Autowired
@Qualifier("beanname")

Selon le @ Qualifier javadoc

Cette annotation peut être utilisée sur un champ ou un paramètre comme qualificatif pour les beans candidats lors du câblage automatique

99
Biju Kunjummen

J'utilisais un proxy de nom de bean qui gâchait le câblage automatique par nom. @Resource n'a pas eu ce problème car il ne se soucie pas du type. Alors maintenant, je connais une raison pour cette recommandation des développeurs de Spring :-) Just FYI

2
jeet

Si vous souhaitez définir le nom du bean avec lequel ils seront enregistrés dans le conteneur DI, vous pouvez passer le nom dans l'annotation elle-même, par exemple @ Service ("employeeManager").

Ensuite, en utilisant le code ci-dessous, vous pouvez activer le câblage automatique par nom

@Autowired
@Qualifier("employeeManager")
private EmployeeManagerService employeeManagerService;
2
tinku

Utilisez @Component ("beanname") dans la définition de classe Java de votre bean

Ensuite, lors du câblage automatique, utilisez JSR 330

@Inject @Named (Value = "beanname")

1
Nandan