web-dev-qa-db-ja.com

春のステレオタイプを使用する利点は?

Spring-mvcを使用してWebアプリケーションを開発しています。

これで、@ Controller、@ Service、および@Repositoryステレオタイプが使用可能になります。

特に私が使用しているため、@ Controllerは特に便利であるとわかりました

<context:component-scan base-package="my.cool.controller"/>

@Serviceと@Repositoryに関して、これまでのところ

  1. クラスに正しいステレオタイプの注釈が付けられている場合、例外はより適切に処理されます。これは、私が認める利点です。
  2. サービスとDAO /リポジトリにコンポーネントスキャンを使用することもできますが、アプリケーションの起動時間が遅くなるため、コンポーネントスキャンを使用するのは好きではありません。 1秒で、週に1回再展開します)

それで、より良い例外を除いて、他にどんな利点がありますか?注釈クラスはパフォーマンスに影響を与えますか?

ステレオタイプの説明:

  • @Service-すべてのサービスクラスに@Serviceアノテーションを付けます。このレイヤーは作業単位を認識しています。すべてのビジネスロジックはServiceクラスにあります。通常、サービス層のメソッドはトランザクションでカバーされます。サービスメソッドから複数のDAO呼び出しを行うことができます。1つのトランザクションが失敗すると、すべてのトランザクションがロールバックされます。
  • @Repository-すべてのDAOクラスに@Repositoryで注釈を付けます。すべてのデータベースアクセスロジックはDAOクラスにある必要があります。
  • @Component-他のコンポーネント(たとえば、RESTリソースクラス)にコンポーネントステレオタイプで注釈を付けます。
  • @Autowired-@Autowiredアノテーションを使用して、Springに他のBeanをクラスに自動接続させます。

@Componentは、任意のSpring管理コンポーネントの一般的なステレオタイプです。 @Repository@Service、および@Controllerは、それぞれ永続性、サービス、プレゼンテーションレイヤーなど、より具体的なユースケース向けの@Componentの特殊化です。

それらを使用する理由:

  • @Componentよりも@Repositoryまたは@Serviceを使用する主な利点は、たとえば@Repositoryで注釈が付けられたすべてのクラスを対象とするAOPポイントカットを簡単に作成できることです。
  • コンテキストxmlファイルにbean定義を記述する必要はありません。代わりに、クラスに注釈を付け、それらを自動配線で使用します。
  • 特殊な注釈は、アプリケーション層を明確に区別するのに役立ちます(標準の3層アプリケーション)。

現在、コンテキストXML Beanとアノテーションを使用することによる実際のパフォーマンスへの影響は同じです。コンポーネントのスキャンは少し高価です(@ Service、@ Componentをスキャンする場合)。注釈はリフレクション、xmlで「解析」されます-xmlパーサーで。しかし、あなたが言ったように、それは起動時です-それは一度だけ起こります。また、適度なマシンでは、注釈を付けても、すぐに起動します。

56
Jeevan Patil

コンポーネントスキャンにより、xmlまたはJava構成を使用して手動で各Beanを定義する必要がなくなります。

サービスレイヤー、データレイヤーなどのレイヤーを定義するために複数のステレオタイプがあります。また、特定のタイプを実行する場合は、異なるステレオタイプに基づいて行うことができます。

2