Spring アノテーションは@Controller
と同じ@Service
ですか?
ビジネスロジックのマッピングと呼び出し@Controller
に使用できるものについて考えています。URL
@Service
ビジネスロジックを含むサービスクラスに注釈を付けるために使用されます。
Service クラスに注釈を付ける@Controller
代わりに使用できますか?@Service
Spring アノテーションは@Controller
と同じ@Service
ですか?
ビジネスロジックのマッピングと呼び出し@Controller
に使用できるものについて考えています。URL
@Service
ビジネスロジックを含むサービスクラスに注釈を付けるために使用されます。
Service クラスに注釈を付ける@Controller
代わりに使用できますか?@Service
@Controller
、注釈の定義を見ると、@Service
これらが特別な種類の注釈であることがわかります@Component
。
@Component
public @interface Service {
….
}
@Component
public @interface Controller {
…
}
違いは何ですか?
@コントローラ
注釈は、特定の@Controller
クラスがコントローラーの役割を果たすことを示します。@Controller
アノテーションは、アノテーションが付けられたクラスのステレオタイプとして機能し、その役割を示します。
@Controller の特徴は何ですか?
同じように見えても、この注釈を他の@Service
や などと切り替えることはできません。@Repository
ディスパッチャーは、アノテーションが付けられたクラスをスキャンし、それらのクラス内のアノテーション@Controller
を検出@RequestMapping
します。アノテーション付きクラス@RequestMapping
でのみ使用できます。@Controller
@サービス
@Services
ビジネス ロジックを保持し、リポジトリ レイヤーでメソッドを呼び出します。
@Service の特徴は何ですか?
ビジネスロジックを保持していることを示すために使用されるという事実を除けば、このアノテーションが提供する目立った専門性はありませんが、Spring は将来、いくつかの例外を追加する可能性があります。
リンクされた回答: Spring の @Component、@Repository、および @Service アノテーションの違いは何ですか?
いいえ、@Controller
は と同じではありません@Service
が、どちらも の特殊化である@Component
ため、クラスパス スキャンによる検出の候補になります。@Service
アノテーションはサービス層で使用され、@Controller
プレゼンテーション層の Spring MVC コントローラー用です。通常@Controller
、 には URL マッピングがあり、Web 要求によってトリガーされます。
@Service vs @Controller
@Service : クラスは「ビジネス サービス ファサード」(コア J2EE パターンの意味で)、または類似のものです。
@Controller : 注釈付きクラスが「コントローラー」であることを示します (例: Web コントローラー)。
----------主要なステレオタイプに関する有用なメモを見つける http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/stereotype/Component.html
@interface コンポーネント
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
public @interface Component
アノテーション付きクラスがコンポーネントであることを示します。このようなクラスは、注釈ベースの構成とクラスパス スキャンを使用するときに、自動検出の候補と見なされます。
@インターフェースコントローラー
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Controller
注釈付きクラスが「コントローラー」であることを示します (例: Web コントローラー)。
@インターフェースサービス
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Service
注釈付きクラスが「サービス」であることを示します。これは、もともとドメイン駆動設計 (Evans、2003) によって「カプセル化された状態のない、モデル内でスタンドアロンのインターフェイスとして提供される操作」として定義されていました。また、クラスが「ビジネス サービス ファサード」(コア J2EE パターンの意味で)、または同様のものであることを示す場合もあります。この注釈は汎用的なステレオタイプであり、個々のチームはセマンティクスを絞り込み、必要に応じて使用できます。
@interface リポジトリ
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Repository
注釈付きクラスが「リポジトリ」であることを示します。これは、もともとドメイン駆動設計 (Evans、2003) によって「オブジェクトのコレクションをエミュレートするストレージ、検索、および検索動作をカプセル化するためのメカニズム」として定義されていました。「データ アクセス オブジェクト」などの従来の J2EE パターンを実装するチームは、このステレオタイプを DAO クラスに適用することもできますが、そうする前に、データ アクセス オブジェクトと DDD スタイルのリポジトリの違いを理解するように注意する必要があります。この注釈は汎用的なステレオタイプであり、個々のチームはセマンティクスを絞り込み、必要に応じて使用できます。
このようにアノテーションが付けられたクラスは、PersistenceExceptionTranslationPostProcessor と組み合わせて使用すると、Spring DataAccessException 変換の対象となります。注釈付きクラスは、ツールやアスペクトなどの目的で、アプリケーション アーキテクチャ全体におけるその役割についても明確にされています。
Spring 2.5 の時点で、このアノテーションは @Component の特殊化としても機能し、実装クラスがクラスパス スキャンによって自動検出されるようにします。
いいえ、違います。たとえば、アプリがデプロイされると、コントローラーのマッピングが中断されます。
とにかくしたいのはなぜですか、コントローラーはサービスではなく、その逆も同様です。