84

Spring アノテーションは@Controllerと同じ@Serviceですか?

ビジネスロジックのマッピングと呼び出し@Controllerに使用できるものについて考えています。URL

@Serviceビジネスロジックを含むサービスクラスに注釈を付けるために使用されます。

Service クラスに注釈を付ける@Controller代わりに使用できますか?@Service

4

10 に答える 10

42

@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 アノテーションの違いは何ですか?

于 2016-08-24T10:23:55.250 に答える
7

いいえ、@Controllerは と同じではありません@Serviceが、どちらも の特殊化である@Componentため、クラスパス スキャンによる検出の候補になります。@Serviceアノテーションはサービス層で使用され、@Controllerプレゼンテーション層の Spring MVC コントローラー用です。通常@Controller、 には URL マッピングがあり、Web 要求によってトリガーされます。

于 2013-04-10T10:21:00.553 に答える
5

@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

アノテーション付きクラスがコンポーネントであることを示します。このようなクラスは、注釈ベースの構成とクラスパス スキャンを使用するときに、自動検出の候補と見なされます。

他のクラスレベルのアノテーションも、コンポーネントを識別するものと見なすことができます。通常は、@Repository アノテーションや AspectJ の @Aspect アノテーションなどの特別な種類のコンポーネントです。

@インターフェースコントローラー

@Target(value=TYPE)
 @Retention(value=RUNTIME)
 @Documented
 @Component
public @interface Controller

注釈付きクラスが「コントローラー」であることを示します (例: Web コントローラー)。

このアノテーションは @Component の特殊化として機能し、実装クラスがクラスパス スキャンによって自動検出されるようにします。これは通常、RequestMapping アノテーションに基づくアノテーション付きハンドラー メソッドと組み合わせて使用​​されます。

@インターフェースサービス

@Target(value=TYPE)
 @Retention(value=RUNTIME)
 @Documented
 @Component
public @interface Service

注釈付きクラスが「サービス」であることを示します。これは、もともとドメイン駆動設計 (Evans、2003) によって「カプセル化された状態のない、モデル内でスタンドアロンのインターフェイスとして提供される操作」として定義されていました。また、クラスが「ビジネス サービス ファサード」(コア J2EE パターンの意味で)、または同様のものであることを示す場合もあります。この注釈は汎用的なステレオタイプであり、個々のチームはセマンティクスを絞り込み、必要に応じて使用できます。

このアノテーションは @Component の特殊化として機能し、実装クラスがクラスパス スキャンによって自動検出されるようにします。

@interface リポジトリ

@Target(value=TYPE)
 @Retention(value=RUNTIME)
 @Documented
 @Component
public @interface Repository

注釈付きクラスが「リポジトリ」であることを示します。これは、もともとドメイン駆動設計 (Evans、2003) によって「オブジェクトのコレクションをエミュレートするストレージ、検索、および検索動作をカプセル化するためのメカニズム」として定義されていました。「データ アクセス オブジェクト」などの従来の J2EE パターンを実装するチームは、このステレオタイプを DAO クラスに適用することもできますが、そうする前に、データ アクセス オブジェクトと DDD スタイルのリポジトリの違いを理解するように注意する必要があります。この注釈は汎用的なステレオタイプであり、個々のチームはセマンティクスを絞り込み、必要に応じて使用できます。

このようにアノテーションが付けられたクラスは、PersistenceExceptionTranslationPostProcessor と組み合わせて使用​​すると、Spring DataAccessException 変換の対象となります。注釈付きクラスは、ツールやアスペクトなどの目的で、アプリケーション アーキテクチャ全体におけるその役割についても明確にされています。

Spring 2.5 の時点で、このアノテーションは @Component の特殊化としても機能し、実装クラスがクラスパス スキャンによって自動検出されるようにします。

于 2016-07-03T06:51:39.470 に答える
1
  • コントローラーは、異なるビュー間のナビゲーションを処理します。マッピング リクエストのマッピングは、コントローラーの助けを借りて処理されます。
  • サービスは、通常ビジネス ロジックが実行されるリポジトリと直接対話します。サービス層で追加、削除、削除などを行うことができます
于 2020-06-24T04:33:36.663 に答える
0

いいえ、違います。たとえば、アプリがデプロイされると、コントローラーのマッピングが中断されます。

とにかくしたいのはなぜですか、コントローラーはサービスではなく、その逆も同様です。

于 2013-04-10T10:17:58.757 に答える