1. ホーム
  2. spring

[解決済み] Springのアノテーション@Controllerは@Serviceと同じですか?

2023-06-02 19:06:05

質問

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

私は @Controller に使用することができます。 URL をマッピングし、ビジネスロジックを呼び出すことができます。

一方 @Service は、ビジネスロジックを含むサービスクラスのアノテーションに使用します。

を使用することができます。 @Controller の代わりに @Service を使ってServiceクラスにアノテーションを付けることができますか?

どのように解決するのですか?

いいえ、それぞれかなり異なっています。

どちらも、異なる特殊化された コンポーネント アノテーションの異なる特殊化(実際には同じインターフェースの異なる2つの実装)なので、両方ともクラスパススキャンによって検出できます(XMLコンフィギュレーションで宣言した場合)

サービス アノテーションはサービスレイヤーで使用され、サービスタスクを実行するクラスにアノテーションを付けます。多くの場合、このアノテーションは使用しませんが、多くの場合、ベストプラクティスを表すためにこのアノテーションを使用します。例えば、データベースにオブジェクトを永続化するためにDAOクラスを直接呼び出すことができますが、これは恐ろしいことです。DAOを呼び出すサービスクラスを呼び出すのはかなり良いことです。これはSeparation of Concernsパターンを実行するには良いことです。

@Controller アノテーションはSpring MVCフレームワーク(Webアプリケーションを実装するためのSpring Frameworkのコンポーネント)で使用されるアノテーションです。Controllerアノテーションは、特定のクラスがコントローラの役割を果たすことを示します。Controllerアノテーションは、アノテーションされたクラスのステレオタイプとして機能し、その役割を示します。ディスパッチャは、このようなアノテーションのついたクラスをスキャンしてマッピングされたメソッドを探し、 @RequestMapping アノテーションを検出します。

Spring MVCのアーキテクチャを見ると、フロントコントローラを表すDispatcherServletクラス(XMLの設定で宣言します)があり、すべてのHTTPリクエストを適切なコントローラクラス(@Controllerでアノテーションされています)に向けてディスパッチしています。このクラスは、そのメソッドによってビジネスロジックを実行します(そして、サービスを呼び出すことができます)。これらのクラス (またはそのメソッド) は、一般的に リクエストマッピング アノテーションを使用します。これは、コントローラとそのメソッドで処理する HTTP リクエストを指定するものです。

例えば

@Controller
@RequestMapping("/appointments")
public class AppointmentsController {

    private final AppointmentBook appointmentBook;

    @Autowired
    public AppointmentsController(AppointmentBook appointmentBook) {
        this.appointmentBook = appointmentBook;
    }

    @RequestMapping(method = RequestMethod.GET)
    public Map<String, Appointment> get() {
        return appointmentBook.getAppointmentsForToday();
    }

このクラスはコントローラです。

このクラスは "/appointments" "folder" への全てのHTTPリクエストを処理し、特に get メソッドは "/appointments" フォルダへの全ての GET HTTP リクエストを処理するために呼び出されるメソッドとなります。

これで、より明確になったかと思います。