16

私はSpringフレームワークを使用して数年間Webアプリケーションを開発してきました。最近、私のチームの新入生が私に質問をしました、Springには@Component注釈があります、注釈の本当の目的は何@Repositoryですか@Service、、@Controller?私は、Java Beanのタイプを識別するためだけに、それらの間に違いはないという答えを彼に与えようとしました。ご存知のように、私の説明には説得力がなく、彼はそれを購入しませんでした。

だから私は質問をしたいのですが、注釈の本当の目的は何@Repositoryですか@Service、、@Controller?これらの注釈の本当の違いは何ですか?

4

1 に答える 1

10

この質問は以前に尋ねられました:Springの@ Component、@ Repository、@ Serviceアノテーションの違いは何ですか?

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

Spring 2.5では、さらにステレオタイプアノテーション(@ Component、@ Service、および@Controller)が導入されています。@Componentは、Springが管理するコンポーネントの一般的なステレオタイプです。@ Repository、@ Service、および@Controllerは、それぞれ永続化、サービス、およびプレゼンテーションの各レイヤーなど、より具体的なユースケース向けの@Componentの特殊化です。

したがって、コンポーネントクラスに@Componentアノテーションを付けることができますが、代わりに@ Repository、@ Service、または@Controllerでアノテーションを付けることで、クラスはツールによる処理やアスペクトへの関連付けにより適しています。たとえば、これらのステレオタイプアノテーションは、ポイントカットの理想的なターゲットになります。

したがって、サービスレイヤーに@Componentまたは@Serviceのどちらを使用するかを選択する場合は、@Serviceの方が明らかに適しています。同様に、前述のように、@ Repositoryは、永続層での自動例外変換のマーカーとしてすでにサポートされています。

于 2013-03-20T12:44:38.957 に答える