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?
@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:
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.
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é.