Spring の @Component、@Repository、@Service アノテーションの違いは何ですか? 質問する

Spring の @Component、@Repository、@Service アノテーションの違いは何ですか? 質問する

できる@Component@Repository、 そして@Serviceアノテーションは Spring で互換的に使用できますか? それとも、表記デバイスとして機能する以外に、何か特別な機能を提供しますか?

つまり、Service クラスがあり、そのアノテーションを から に変更した場合@Service@Component動作は同じように動作しますか?

それとも、アノテーションはクラスの動作や機能にも影響しますか?

ベストアンサー1

からSpring ドキュメント:

アノテーション@Repositoryは、リポジトリの役割またはステレオタイプを満たすクラス(データアクセスオブジェクトまたはDAOとも呼ばれます)のマーカーです。このマーカーの用途の1つに、例外の自動翻訳があります。例外翻訳

Spring では、さらに 、 、 というステレオタイプ アノテーションも提供されています。@Component@ServiceSpring 管理コンポーネントの汎用ステレオタイプです。@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)

おすすめ記事