web-dev-qa-db-fra.com

A quoi sert l'annotation javax.inject.Named?

J'essaie de comprendre le javax.inject package et je ne sais pas ce que le javax.inject.Named annotation est censé être utilisé pour. La Javadoc n'explique pas l'idée derrière elle.

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 _ sur un haricot, il semble l’ajouter à l’usine de haricots, mais la description de Javadoc est si claire que je ne peux pas dire s’il s’agit du comportement standard ou du comportement spécifique de Spring.

Mes questions sont:

  1. Quelle est la différence entre @Named et @Qualifier
  2. 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 de @Component au printemps?

Mise à jour 1 il existe une excellente explication de @Named et @Qualifier à l'article de Nice sur @Named et @Qualifierhttp://Java.dzone.com/articles/Java-ee6-cdi-named-components Merci @xmedeko pour avoir lié ce commentaire au commentaire ci-dessous.

103
ams

Utilisez @Named pour différencier différents objets du même type liés dans la même portée.

@Named("maxWaitTime")
public long maxWaitTimeMs;

@Named("minWaitTime")
public long minWaitTimeMs;

Sans le qualificatif @Named, l'injecteur ne saurait pas quelle longueur lier à quelle variable.

Si vous souhaitez créer des annotations qui agissent comme @Named, utilisez l'annotation @Qualifier lors de leur création. Si vous regardez @Named, il est annoté avec @Qualifier.

75
sbridges

@Inject au lieu de printemps @Autowired injecter un haricot.
@Named au lieu de printemps @Component déclarer un haricot.

Ces annotations standard JSR-3 sont analysées et extraites de la même manière que les annotations Spring (à condition que le jar suivant soit dans votre chemin de classe)

52
Nadav Finish

Concernant le n ° 2, selon la spécification JSR-330:

Ce paquet fournit des annotations d'injection de dépendance qui activent les classes portables, mais il laisse la configuration de dépendance externe jusqu'à l'implémentation de l'injecteur.

Il appartient donc au fournisseur de déterminer quels objets sont disponibles pour l’injection. Dans le cas du printemps, ce sont tous des haricots de printemps. Et toutes les classes annotées avec des annotations JSR-330 sont automatiquement ajoutées en tant que beans Spring lors de l'utilisation d'un AnnotationConfigApplicationContext.

7
sourcedelica

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 les résolveurs JSF EL. L'injection peut être effectuée à l'aide de noms, mais ce n'était pas ainsi que l'injection dans CDI était censée fonctionner, car CDI nous donne un moyen beaucoup plus riche d'exprimer les points d'injection et les fèves à injecter.

3
abbas