javax.inject.Namedアノテーションは何に使用されることになっているのですか?


113

私はjavax.injectパッケージを理解しようとしていますが、javax.inject.Named注釈が何に使用されることになっているのか明確ではありません。Javadocは、その背後にある考え方を説明していません。

Javadocはhttp://download.oracle.com/javaee/6/api/javax/inject/Named.htmlにあります

私はSpring 3.0を使用していくつかのサンプルプログラムを記述しています@Namedが、Beanを配置することでBeanファクトリに追加されているようですが、Javadocの記述は非常に軽いため、標準の動作なのかSpring固有の動作なのかわかりません。

私の質問は:

  1. 違いは何ですか@Named@Qualifier
  2. ランタイムシステムに、クラスを他のクラスに注入できるようにするには、どのようなアノテーションを付ければよいですか?@Component春に相当?

Update 1についての素晴らしい説明が@Namedあります。また、https: //dzone.com/articles/java-ee6-cdi-named-components @Qualifierに関するニースの記事には、以下のコメントへのリンクについて@xmedekoに感謝しています。@Named@Qualifier


JSR-330の設定は仕様の範囲外です。つまり、コンテナ固有です。
するThorbjörnRavnアンデルセン

1
Springのドキュメントによると、「JSR 330の@Namedアノテーションは、コンポーネントを検出し、コンポーネントに名前を付けるための手段として使用できます。クラスパスにJSR 330 JARがある場合、この動作は自動的に有効になります。」この動作は春に固有ですか、それとも@Namedを理解するすべてのコンテナに固有ですか?
ams

回答:


87

同じスコープにバインドされた同じタイプの異なるオブジェクト@Named区別するために使用します。

@Named("maxWaitTime")
public long maxWaitTimeMs;

@Named("minWaitTime")
public long minWaitTimeMs;

なけれ@Named修飾子、インジェクタがどの変数にバインドするためにどの長いか分からないでしょう。

  • のよう@Namedに機能するアノテーションを作成する場合は、作成時にアノテーションを使用し@Qualifierます。

  • を見ると@Named、それ自体がで注釈されてい@Qualifierます。


@Namedは実際には@Qualifierですが、@ Qualifierがそれほど一般的である必要があるのはなぜですか。
AMS

ステレオタイプについてどういう意味かわかりません。同じタイプの異なるインスタンスを区別するために新しい注釈を追加するつもりなら、はい。
スブリッジズ、2011年

たとえば、@ Named( "maxWaitTime")の代わりに、@ MaxWaitTimeを使用できます。それはほんの少しクリーナーです。
sourcedelica


わかりません...変数名の違いで違いがわかりませんか?
CodyBugstein 2014年

64

@InjectSpringの代わりに@AutowiredBeanを注入します。
@NamedSpringの代わりに@ComponentBeanを宣言します。

これらのJSR-330標準アノテーションは、Springアノテーションと同じ方法でスキャンおよび取得されます(以下jarがクラスパスにある限り)。


「豆を注入する」という表現はあいまいです。「そのBeanの依存関係をすべて満たす」という意味ですか、それとも「そのBeanを依存関係として持つものに挿入する」という意味ですか?
アンドリュース

Spring注釈に対応するJSRのリストはどこにありますか?
Pawan

Beanを挿入する-「そのBeanを依存関係を持つものに挿入する」
Nadav終了

I「M申し訳ありませんPawan、私はJSRのリストに精通していないよ春の注釈への対応という
Nadav完了

8

#2については、JSR-330仕様によると、

このパッケージは、移植可能なクラスを可能にする依存性注入アノテーションを提供しますが、外部依存関係の設定はインジェクターの実装に任されています。

したがって、インジェクションに使用できるオブジェクトを決定するのはプロバイダーです。Springの場合は、すべてSpring Beanです。また、JSR-330アノテーションが付けられたクラスは、AnnotationConfigApplicationContextを使用すると、Spring Beanとして自動的に追加されます。


5

@Namedアノテーションの主な役割は、アプリケーション内のELステートメントを解決する目的で、通常はJSF ELリゾルバーを介してBeanを定義することです。注入は名前を使用して実行できますが、CDIは注入ポイントとそれらに注入されるBeanを表現するためのより豊かな方法を提供するため、CDIでの注入が機能するためのものではありませんでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.