J'essaie de comprendre le javax.inject
package et je ne sais pas à quoi javax.inject.Named
sert l' annotation. Le Javadoc n'explique pas l'idée derrière cela.
Javadoc est à http://download.oracle.com/javaee/6/api/javax/inject/Named.html
J'utilise Spring 3.0 pour écrire des exemples de programmes, en mettant @Named
un bean, il semble l'ajouter à l'usine de haricots, mais la description Javadoc est si légère que je ne peux pas dire si c'est le comportement standard ou le comportement spécifique de Spring.
Mes questions sont:
- Quelle est la différence entre
@Named
et@Qualifier
- Comment êtes-vous censé dire au système Runtime qu'une classe doit être injectable dans d'autres classes quelle est l'annotation pour cela? L'équivalent du
@Component
printemps?
Mise à jour 1, il y a une excellente explication @Named
et @Qualifier
à Nice article sur @Named
et @Qualifier
https://dzone.com/articles/java-ee6-cdi-named-components merci @xmedeko pour y avoir lié le commentaire ci-dessous.
Réponses:
Permet
@Named
de différencier différents objets du même type liés dans la même étendue.Sans le
@Named
qualificatif, l'injecteur ne saurait pas quel temps se lier à quelle variable.Si vous souhaitez créer des annotations qui agissent comme
@Named
, utilisez l'@Qualifier
annotation lors de leur création.Si vous regardez
@Named
, il est lui-même annoté avec@Qualifier
.la source
@Named
et@Qualifier
java.dzone.com/articles/java-ee6-cdi-named-components@Inject
au lieu de Spring@Autowired
pour injecter un haricot.@Named
au lieu de Spring@Component
pour déclarer un bean.Ces annotations standard JSR-330 sont analysées et récupérées de la même manière que l'annotation Spring (tant que ce qui suit
jar
est dans votre chemin de classe)la source
Concernant le n ° 2, selon la spécification JSR-330:
C'est donc au fournisseur de déterminer quels objets sont disponibles pour l'injection. Dans le cas du printemps, ce sont tous les haricots de printemps. Et toute classe annotée avec des annotations JSR-330 est automatiquement ajoutée en tant que beans Spring lors de l'utilisation d'un AnnotationConfigApplicationContext.
la source
Le rôle principal de l'annotation @Named est de définir un bean dans le but de résoudre les instructions EL au sein de l'application, généralement via des résolveurs JSF EL. L'injection peut être effectuée en utilisant des noms, mais ce n'était pas ainsi que l'injection dans CDI était censée fonctionner puisque CDI nous donne un moyen beaucoup plus riche d'exprimer les points d'injection et les beans à y injecter.
la source