Heim  >  Artikel  >  Java  >  @Resource vs. @Autowired: Wann sollte man die Annotation zur Abhängigkeitsinjektion auswählen?

@Resource vs. @Autowired: Wann sollte man die Annotation zur Abhängigkeitsinjektion auswählen?

DDD
DDDOriginal
2024-11-13 15:37:02666Durchsuche

@Resource vs @Autowired: When to Choose Which Dependency Injection Annotation?

@Resource vs @Autowired: Ein tieferer Einblick

Im Bereich der Abhängigkeitsinjektion (DI) spielen Annotationen eine entscheidende Rolle bei der Etablierung Beziehungen zwischen Objekten. Zwei weit verbreitete Annotationen sind @Resource (aus JSR-250) und @Autowired (aus dem Spring-Framework). Aber welche Annotation sollten Sie wählen?

@Resource: Namensbasierter Abruf

@Resource dient als Mechanismus zum Abrufen einer Ressource anhand ihres Namens. Dieser Name kann über den Parameter „name“ der Annotation angegeben oder aus dem annotierten Feld oder dem Namen des Setters abgeleitet werden. Durch die Verwendung von @Resource fordern Sie explizit eine bekannte Ressource anhand ihrer spezifischen Kennung an.

@Autowired: Typbasierte Verkabelung

Andererseits ist @Autowired (oder @Inject in Java EE) versucht, eine Komponente einzubinden, die dem erforderlichen Typ entspricht. Dazu wird der Typ des annotierten Felds oder Setters untersucht und der Anwendungskontext nach einer kompatiblen Bean durchsucht. Die @Qualifier-Annotation kann bei Bedarf zusammen mit @Autowired verwendet werden, um die Suche auf bestimmte Bean-Namen einzugrenzen.

Konzeptionelle Unterschiede

Der grundlegende Unterschied zwischen @Resource und @Autowired liegt in ihren Ansätzen:

  • @Resource: Konzentriert sich auf das Abrufen einer bestimmten Ressource, die unter ihrem Namen bekannt ist.
  • @Autowired: Zielt darauf ab, automatisch eine geeignete Komponente basierend auf ihrem Typ zu verdrahten.

Springs @Resource-Verhalten

Während die JSR-250-Spezifikation für @Resource den Namen priorisiert -basierten Abruf enthält die Spring-Implementierung von @Resource einen Fallback-Mechanismus. Wenn die namensbasierte Auflösung fehlschlägt, wird standardmäßig eine typbasierte Auflösung verwendet, ähnlich wie bei @Autowired. Diese praktische Funktion kann zu Verwirrung führen, da Entwickler möglicherweise versehentlich @Resource für die typbasierte automatische Verkabelung verwenden.

Das obige ist der detaillierte Inhalt von@Resource vs. @Autowired: Wann sollte man die Annotation zur Abhängigkeitsinjektion auswählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn