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"?
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.
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
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
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;
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")