2013-12-08 28 views
46

@Inject@Resource@Autowired注釈の違いは何ですか?注釈とリソースと自動注釈付き注釈

それぞれの場合はいつ使用しますか?

+2

http://docs.spring.io/spring/docs/3.2.4.RELEASE/spring-framework-reference/htmlsingle/#beans-standard-annotations、http://docs.spring.io /spring/docs/3.2.4.RELEASE/spring-framework-reference/htmlsingle/#beans-resource-annotation –

+1

[@Resource vs @Autowired]の複製が可能です(http://stackoverflow.com/questions/4093504/resource)。 -vs-autowired) –

+1

私が見つけた例の良い説明は[ここ](http://blogs.sourceallies.com/2011/08/spring-injection-with-resource-and-autowired/) – marioosh

答えて

94

@Injectと@Autowireと@Resourceの違いは何ですか?

@Autowired:即ち注釈付きフィールドまたは請負業者のインタフェースによってのクラスによって、によって型リソースを注入スプリング可否注釈(@Injectと@Resourceとは対照的に)。インターフェイスやサブクラスの実装がほとんどない場合は、あいまいさを避けるために@Qualifierアノテーションを使用して選択範囲を絞り込むことができます。フォールバック一致の場合、Bean名はデフォルトの修飾子値と見なされます。この慣習を使用して特定のBeanを名前で参照することはできますが、@Autowiredは基本的にオプションの意味限定子を使用した型駆動型注入です。

@Inject: JSR-330(Java用依存性注入)に基づくアノテーションは、注入可能なコンストラクタ、メソッド、およびフィールドを識別します。このアノテーションは、Springの@Autowiredアノテーションのほぼ完全なドロップイン置換です。したがって、Spring固有の@Autowiredアノテーションを使用する代わりに、@ Injectを使用することもできます。 @Autowiredと@Injectの違いの1つは、@Injectに必須のフィールドがないため、適切なオブジェクトが見つからない場合に失敗するため、@Autowiredはrequired = falseを使用でき、nullの可能なフィールドのみを使用できますもし必要なら!)。 @Injectアノテーションの利点は、直接参照を注入するのではなく@Injectにプロバイダを注入するように依頼することです。プロバイダインタフェースは、とりわけ、Bean参照の遅延注入とBeanの複数インスタンスの注入を可能にします。 インターフェイスまたはサブクラスの実装がほとんどない場合は、あいまいさを避けるために@Namedアノテーションを使用して選択範囲を絞り込むことができます。 @Namedアノテーションは、Springの@Qualifierとよく似ています。

@Resource:アノテーションはJSR-250に基づいています。 @Resourceは@Autowiredと@Injectと非常に似ていますが、主な違いは、注入するために必要なBeanを見つけるために取られた実行パスです。 @Resourceは、最初に名前で検索し、次にタイプで検索し、最終的には修飾子で検索の範囲を絞り込みます(一致が名前で見つかった場合は無視されます)。 @Autowiredと@Injectは最初に型を指定してから絞り込みを絞り込み、最後に名前を指定します。

+5

何がお勧めですか?ベストプラクティス? –

+1

私はあなたのコメントに返信してうれしいですが、私はこの答えをそのまま保つことを好む。あなたは新しい質問を投稿しますか? –

+1

最後の行では、私が知っているように@Autowiredも名前で検索していると言いましたが、名前のオプションはありませんか? –

1

@Haimに加えて、SpringとJSR-330(Java用依存関係注入)アノテーションとSpringとの最後の使い方の違いのthere is good descriptionに答えています。

2
|------------|---------------|---------------|---------------|-----------------------| 
|   | Setter/Field | Constructor | Applicable to | Matching order  | 
|   | injection  | injection  | type   |      | 
|------------|---------------|---------------|---------------|-----------------------| 
| @Resource |  X  |    |  X  | Name, Type, Qualifier | 
|------------|---------------|---------------|---------------|-----------------------| 
| @Autowired |  X  |  X  |    | Type, Qualifier, Name | 
|------------|---------------|---------------|---------------|-----------------------| 
| @Inject |  X  |  X  |    | Type, Qualifier, Name | 
|------------|---------------|---------------|---------------|-----------------------|