2012-04-17 8 views
23

SpringアプリケーションでBeanとして動作するクラスには、同時に@Component@Namedの両方が必要ですか?同じBeanクラスの@Componentと@Namedの両方

両方を使用する場合、どういう意味がありますか?

私はネットを検索してみましたが、これらの注釈の標準的な文書を見て、少し混乱していました。

最後に、@NamedアノテーションでBeanの名前が指定されていない場合は、アプリケーションによってどの名前が使用されますか?

答えて

44

@Componentおよび@Namedは、基本的に同じことを行うアノテーションですが、異なるAPIに由来します。

@ComponentはSpring APIに属します。 Beanとして自動的に検出されるクラスをマークし、オプションでそのBeanの名前を指定することができます(@Component("foo"))。明示的な名前指定がなければ、検出されたBeanはそのクラスの名前から派生したデフォルト名を取得します。

@Namedは、javax.inject APIに属します。 Beanとして自動的に検出されるクラスをマークし、名前を指定する必要があります。

春は、これらの両方のAPIをサポートしています。両方のアノテーションを同じクラスで使用することは、同じ機能を提供するので意味がありません。

を見る:

4

スプリング@Component(スプリング)の代替として@Namedアノテーション(JSR-330)をサポートします。

一般に、@Namedは、それが何をしているのかわからないので、私はできる限り毎回@Componentを使用することをお勧めします。

+0

合意しました。(a)名前の名前が正しくありません。しかし、多くのクラスは、異なるフレームワークのプロジェクト間で共有されるリソースです。 @Namedを使用してbean-ifyクラスを使用すると、各アプリケーションの依存関係としてjavax.injectionが必要になります。アノテーションのSpringに依存する別のフレームワークよりも優れています。 – Freestyle076

0

どちらか一方を使用してください。 @Componentと@Namedの両方を使用しても意味がありません。 暗黙的に割り当てられていない場合は、@( "[someComponentID]")と@Named( "[someNamedID]")にコメントを付けてIDを括弧で渡してBeanに割り当てます。

関連する問題