スポンサーリンク

アノテーション

SpringBootの@Serviceアノテーション

投稿日:2021年3月24日 更新日:

SpringBootの@Serviceアノテーションとは?

まずは、公式Javadocを見てみます。

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

このアノテーションは @Component の特殊化として機能し、クラスパススキャンを通じて実装クラスを自動検出できます。

アノテーション型 Service

 重要なことは、機能的には@Serviceは@Componentであるということです。つまりDI対象である通常のコンポーネントと変わりません。

しかし、近年のWebアプリケーションでは、Contoller->Service->Repositoryというアーキテクチャが一般的であるため、@Componentを付与するクラスの中でも、特にServiceであることを明示するために、@Serviceが使えるようになっています。

 「汎用のステレオタイプであり、個々のチームはセマンティクスを絞り込み」とあります。「セマンティクス」とは「意味」「語義」と翻訳されますが、Webアプリケーションの中で@Serviceを使うときは、チーム内で「サービス」が表す意味を決めて使っていきましょうということです。

Contoller->Service->Repositoryというアーキテクチャをとるときは、「サービス」が表すことは、単純に「ビジネスロジックの置き場」ということになるでしょう。これは『「ビジネスサービスファサード」(コア J2EE パターンの意味で)または類似のものである』に該当します。

また、ドメイン駆動設計の考え方を取り入れるときは、@Serviceを付与するべきクラスは『「カプセル化された状態でモデル内に単独で存在するインターフェースとして提供される操作」』にするのが典型であると書いています。

 ドメイン駆動設計を採用するにしろ、コア J2EE パターンを採用するにしろ、チーム内で@Serviceの意味するところ、つまり@Serviceを付与するべきクラスの債務(役割)をちゃんと決めて使いましょうということです。

SpringBootの@Serviceクラスの使われ方

@Serivceを付与したクラスは、SpringBootアプリケーションの起動時に、コンポーネントスキャンによって認識され、DIコンテナに登録されます。

DI可能(@Autowired可能)なコンポーネントとして扱うことができるようになります。

主に@Controllerを付与したコントローラー層から呼び出して使用することになります。

Udemyのハンズオン動画講座でSpringBootのスキルを磨く!

スポンサーリンク

-アノテーション

Copyright© 【Spring Hack】 , 2022 All Rights Reserved Powered by AFFINGER5.