Maison  >  Article  >  Java  >  Quelle est la différence entre les annotations @autowired et @resource ?

Quelle est la différence entre les annotations @autowired et @resource ?

青灯夜游
青灯夜游original
2020-11-09 10:35:1587427parcourir

Différences : 1. L'annotation @Autowired est fournie par Spring et est injectée uniquement selon byType ; l'annotation @resource est fournie par J2EE et est automatiquement injectée selon byName par défaut. 2. @Autowired est assemblé par type par défaut et @Resource est assemblé par nom par défaut.

Quelle est la différence entre les annotations @autowired et @resource ?

Recommandations associées : "Tutoriel vidéo Java"

Spring ne prend pas seulement en charge son propre @Autowired défini annotations , prend également en charge plusieurs annotations définies par la spécification JSR-250. Par exemple : @Resource, @PostConstruct et @PreDestroy

1, @Autowired

sont fournis par Spring et sont injectés uniquement selon byType

2 , @Resource

est fourni par J2EE et est automatiquement injecté par byName par défaut

@Resource a deux attributs importants : name et type

Spring annote @Resource L'attribut name se résout en nom du bean et l'attribut type se résout en type de bean. Ainsi, si vous utilisez l'attribut name, la stratégie d'injection automatique byName est utilisée, et si l'attribut type est utilisé, la stratégie d'injection automatique byType est utilisée. Si ni l'attribut name ni l'attribut type ne sont spécifiés, la stratégie d'injection automatique byName sera utilisée via le mécanisme de réflexion.

Séquence d'assemblage @Resource :

(1) Si le nom et le type sont spécifiés en même temps, le seul bean correspondant sera trouvé dans le contexte Spring pour l'assemblage. , une exception sera levée

(2) Si le nom est spécifié, recherchez un bean avec un nom (id) correspondant dans le contexte Spring pour l'assemblage. S'il n'est pas trouvé, une exception sera levée

.

(3) Si le type est spécifié, recherchez le seul bean avec le type correspondant dans le contexte Spring pour l'assemblage. Si aucun bean n'est trouvé ou si plusieurs sont trouvés, une exception sera levée

(4) Si ni le nom ni le type ne sont spécifiés, la méthode byName sera automatiquement utilisée. S'il n'y a pas de correspondance, revenez à un type primitif pour la correspondance et effectuez un câblage automatique s'il y a une correspondance.

La fonction de @Resource est équivalente à @Autowired, sauf que @Autowired est automatiquement injecté selon byType.

3. Différences d'utilisation

(1) @Autowired et @Resource peuvent être utilisés pour assembler des beans, et les deux peuvent être écrits dans le champ

ou Setter

(2)

@Autowired est assemblé par type par défaut Par défaut, les objets dépendants doivent exister si vous le souhaitez autoriser les valeurs nulles , vous pouvez définir son attribut obligatoire sur false. Si vous souhaitez utiliser l'assemblage de noms , vous pouvez l'utiliser en conjonction avec l'annotation @Qualifier . (3)

@Resource

, est assemblé par nom par défaut. Le nom peut être spécifié via l'attribut name . l'attribut n'est pas spécifié, lorsque l'annotation est écrite sur le champ , est par défaut le nom du champ pour la recherche de nom. Si l'annotation est écrite sur la méthode setter, le nom de l'attribut sera utilisé par défaut pour l'assemblage. Lorsque ne trouve pas de haricot correspondant au nom, est assemblé selon le type . Cependant, il convient de noter que si l'attribut name est spécifié, il ne sera assemblé qu'en fonction du nom. Il est recommandé d'utiliser l'annotation @Resource sur le champ, afin qu'il n'y ait pas besoin d'écrire une méthode setter, et cette annotation appartient à J2EE, réduisant le couplage avec Spring.

Annotation @ResourceQuelle est la différence entre les annotations @autowired et @resource ?
Pour plus de connaissances liées à la programmation, veuillez visiter :

Enseignement de la programmation

 ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn