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固有の動作なのかわかりません。
私の質問は:
@Named
と@Qualifier
の違いは何ですか@Component
に相当しますか?Update 1@Named
および@Qualifier
に関するニースの記事で@Named
および@Qualifier
の優れた説明があります http://Java.dzone.com/ articles/Java-ee6-cdi-named-components @xmedekoにリンクしてくれてありがとう。
@Namedを使用して、同じスコープ内にバインドされた同じタイプの異なるオブジェクトを区別します。
@Named("maxWaitTime")
public long maxWaitTimeMs;
@Named("minWaitTime")
public long minWaitTimeMs;
@Named修飾子がなければ、インジェクターはどの変数にどの長さをバインドするかを知りません。
@Namedのように動作する注釈を作成する場合は、作成時に@Qualifier注釈を使用します。 @Namedを見ると、それ自体に@Qualifierという注釈が付けられています。
@Inject
Springの@Autowired
の代わりにBeanを注入します。@Named
Springの@Component
の代わりにBeanを宣言します。
これらのJSR-3標準アノテーションは、Springアノテーションと同じ方法でスキャンおよび取得されます(次のjar
がクラスパスにある限り)
#2に関して、JSR-330仕様によると:
このパッケージは、移植可能なクラスを可能にする依存性注入アノテーションを提供しますが、外部依存性設定はインジェクター実装に任せます。
そのため、どのオブジェクトをインジェクションに使用できるかを決定するのはプロバイダー次第です。 Springの場合、それはすべてSpring Beanです。また、JSR-330アノテーションが付けられたクラスは、AnnotationConfigApplicationContextを使用するときに自動的にSpring Beanとして追加されます。
@Namedアノテーションの主な役割は、通常JSF ELリゾルバーを介して、アプリケーション内のELステートメントを解決する目的でBeanを定義することです。インジェクションは名前を使用して実行できますが、CDIはインジェクションポイントとそれらにインジェクトされるBeanを表現するためのはるかに豊富な方法を提供するため、CDIでのインジェクションの動作方法ではありませんでした。