できる@Component
、@Repository
、 そして@Service
アノテーションは Spring で互換的に使用できますか? それとも、表記デバイスとして機能する以外に、何か特別な機能を提供しますか?
つまり、Service クラスがあり、そのアノテーションを から に変更した場合@Service
、@Component
動作は同じように動作しますか?
それとも、アノテーションはクラスの動作や機能にも影響しますか?
ベストアンサー1
アノテーション
@Repository
は、リポジトリの役割またはステレオタイプを満たすクラス(データアクセスオブジェクトまたはDAOとも呼ばれます)のマーカーです。このマーカーの用途の1つに、例外の自動翻訳があります。例外翻訳。Spring では、さらに 、 、 というステレオタイプ アノテーションも提供されています。
@Component
は@Service
、Spring 管理コンポーネントの汎用ステレオタイプです。、@Controller
、は、より具体的なユースケース (それぞれ永続層、サービス層、プレゼンテーション層) 向けに を特殊化したものです。 したがって、 でコンポーネント クラスにアノテーションを付けることができますが、 の代わりに、、 またはでアノテーションを付けると、クラスはツールによる処理やアスペクトとの関連付けにより適したものになります。@Component
@Repository
@Service
@Controller
@Component
@Component
@Repository
@Service
@Controller
たとえば、これらのステレオタイプ アノテーションは、ポイントカットの理想的なターゲットになります。
@Repository
、、@Service
およびは@Controller
、Spring Framework の将来のリリースで追加のセマンティクスを運ぶこともできます。したがって、サービス レイヤーにと のどちらを使用する@Component
か選択する場合、明らかに の方が適しています。同様に、前述のように、 は、永続化レイヤーでの自動例外変換のマーカーとして既にサポートされています。@Service
@Service
@Repository
注釈 | 意味 |
---|---|
@Component |
Spring管理コンポーネントの汎用ステレオタイプ |
@Repository |
永続化レイヤーのステレオタイプ |
@Service |
サービス層のステレオタイプ |
@Controller |
プレゼンテーション層のステレオタイプ (spring-mvc) |