web-dev-qa-db-ja.com

同じBeanクラスの@Componentと@Namedの両方

SpringアプリケーションでBeanとして機能するクラスには、両方の@Componentおよび@Named 同時に?

両方を使用する場合の意味は何ですか?

私はネットを検索してみただけでなく、これらのアノテーションの標準的なドキュメントを見て、少し混乱させました。

最後に、@Named注釈は、Beanの名前を指定しませんか?

30
TechSpellBound

_@Component_と_@Named_は、基本的に同じことを行いますが、異なるAPIからのアノテーションです。

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

_@Named_は_javax.inject_ APIに属します。クラスをBeanとして自動検出するようにマークし、名前を指定する必要があります。

SpringはこれらのAPIの両方をサポートしています。同じ機能を提供するため、同じクラスで両方の注釈を使用することは意味がありません。

以下も参照してください:

58
axtavt

Springは、@Named(Spring)の代替として@Componentアノテーション(JSR-330)をサポートしています。

一般に、@Namedは、その機能を説明していないため、名前が貧弱です。したがって、できる限り@Componentを使用することを好みます。

9
MagGGG

両方のいずれかを使用する必要があります。 @Componentと@Namedの両方を使用しても意味がありません。上記の(その他の)コメントに追加@Component( "[someComponentID]")および@Named( "[someNamedID]")を使用して、暗黙的に割り当てられていない場合は、括弧内にIDを渡すことでIDをBeanに割り当てます。