@Inject
と@Resource
と@Autowired
アノテーションの違いは何ですか?
それらのそれぞれをいつ使用する必要がありますか?
@Injectと@Autowireと@Resourceの違いは?
@ Autowired:タイプ別、つまり、注釈付きフィールドまたは請負業者のインターフェースによるクラスごとにリソースを注入する(@Injectおよび@Resourceとは対照的な)ばね固有注釈。インターフェイスまたはサブクラスの実装がほとんどない場合、@ Qualifierアノテーションを使用して選択を絞り込み、あいまいさを回避できます。フォールバック一致の場合、Bean名はデフォルトの修飾子値と見なされます。この規則を使用して名前で特定のBeanを参照することもできますが、@ Autowiredは基本的に、オプションのセマンティック修飾子を使用した型駆動型注入に関するものです。
@ Inject: JSR-330(Javaの依存性注入)に基づく注釈は、注入可能なコンストラクター、メソッド、およびフィールドを識別します。このアノテーションは、Springの@Autowiredアノテーションのほぼ完全なドロップイン置換です。そのため、Spring固有の@Autowiredアノテーションを使用する代わりに、@ Injectを使用することを選択できます。 @Autowiredと@Injectの違いの1つは、@ Injectに必須フィールドがないため、注入する適切なオブジェクトが見つからない場合に失敗することです。もし必要なら!)。 @Injectアノテーションの利点は、参照を直接注入するのではなく、@ Injectにプロバイダーの注入を依頼できることです。 Providerインターフェースを使用すると、特に、Bean参照の遅延注入とBeanの複数インスタンスの注入が可能になります。インターフェイスまたはサブクラスの実装がほとんどない場合は、@ Namedアノテーションを使用して選択を絞り込み、あいまいさを回避できます。 @Namedアノテーションは、Springの@Qualifierとほとんど同じように機能します
@ Resource: JSR-250に基づく注釈。 @Resourceは@Autowiredおよび@Injectと非常によく似ていますが、主な違いは、注入に必要なBeanを見つけるために実行される実行パスです。 @Resourceは、最初に名前で、次にタイプで、最後に修飾子で検索を絞り込みます(名前で一致が見つかった場合は無視されます)。 @Autowiredと@Injectは、最初にタイプ、次に修飾子、最後に名前で検索を絞り込みます。
|------------|---------------|---------------|---------------|-----------------------|
| | Setter/Field | Constructor | Applicable to | Matching order |
| | injection | injection | type | |
|------------|---------------|---------------|---------------|-----------------------|
| @Autowired | X | X | | Type, Qualifier, Name |
|------------|---------------|---------------|---------------|-----------------------|
| @Inject | X | X | | Type, Qualifier, Name |
|------------|---------------|---------------|---------------|-----------------------|
| @Resource | X | | X | Name, Type, Qualifier |
|------------|---------------|---------------|---------------|-----------------------|
したがって、Springの依存性注入では@Inject
および@Autowired
はまったく同じ動作をします。
@Haimの回答 に加えて、SpringとJSR-330(Java用の依存性注入)アノテーションの違いと最後のアノテーションの使用方法についての適切な説明 があります。春と。