web-dev-qa-db-fra.com

@Component et @Named pour la même classe de bean

Une classe qui agira comme un haricot dans une application Spring nécessite-t-elle simultanément @Component et @Named en même temps?

Quelle est la signification si les deux sont utilisés ainsi?

J'ai essayé de chercher sur le net et j'ai vu la documentation standard de ces annotations et les ai trouvées un peu déroutantes.

Enfin, quel nom est pris par l'application si l'annotation @Named ne spécifie aucun nom pour le bean?

26
TechSpellBound

@Component et @Named sont des annotations qui font fondamentalement la même chose, mais proviennent d’API différentes.

@Component appartient à Spring API. Il marque la classe comme étant automatiquement détecté comme un bean et vous permet éventuellement de spécifier un nom pour ce bean (@Component("foo")). Sans spécification de nom explicite, le bean détecté obtiendra un nom par défaut dérivé du nom de sa classe.

@Named appartient à javax.inject API. Il marque la classe à être détecté automatiquement comme un haricot et vous oblige à spécifier un nom.

Spring prend en charge ces deux API. Il n’est pas logique d’utiliser les deux annotations de la même classe car elles fournissent les mêmes fonctionnalités.

Voir également:

52
axtavt

Spring prend en charge l'annotation @Named (JSR-330) au lieu de @Component (Spring). 

De manière générale, @Named est mal nommé car il ne décrit pas ce qu'il fait. Je préférerais donc utiliser @Component chaque fois que je le peux.

6
MagGGG

N'importe lequel des deux devrait être utilisé . Utiliser à la fois @Component et @Named n'a aucun sens . Ajouter au commentaire précédent (autres) @Component ("[someComponentID]") et @Named ("[ someNamedID] ") pour attribuer un identifiant à un bean en le passant entre parenthèses, si ce n’est pas implicitement attribué.

0