SpringアプリケーションでBeanとして機能するクラスには、両方の@Component
および@Named
同時に?
両方を使用する場合の意味は何ですか?
私はネットを検索してみただけでなく、これらのアノテーションの標準的なドキュメントを見て、少し混乱させました。
最後に、@Named
注釈は、Beanの名前を指定しませんか?
_@Component
_と_@Named
_は、基本的に同じことを行いますが、異なるAPIからのアノテーションです。
_@Component
_はSpring APIに属します。クラスをBeanとして自動検出するようにマークし、オプションでそのBeanの名前(@Component("foo")
)を指定できます。明示的な名前指定が検出されない場合、Beanはそのクラスの名前から派生したデフォルト名を取得します。
_@Named
_は_javax.inject
_ APIに属します。クラスをBeanとして自動検出するようにマークし、名前を指定する必要があります。
SpringはこれらのAPIの両方をサポートしています。同じ機能を提供するため、同じクラスで両方の注釈を使用することは意味がありません。
以下も参照してください:
Springは、@Named
(Spring)の代替として@Component
アノテーション(JSR-330)をサポートしています。
一般に、@Named
は、その機能を説明していないため、名前が貧弱です。したがって、できる限り@Component
を使用することを好みます。
両方のいずれかを使用する必要があります。 @Componentと@Namedの両方を使用しても意味がありません。上記の(その他の)コメントに追加@Component( "[someComponentID]")および@Named( "[someNamedID]")を使用して、暗黙的に割り当てられていない場合は、括弧内にIDを渡すことでIDをBeanに割り当てます。