Spring
2021.09.30
【5分でわかる】Springでよく使うアノテーション40選! 基本からバリデーションまでまるっとご紹介
2023.11.18

1.そもそもアノテーションとは


「アノテーション」は直訳すると「注釈」です。Java開発でのアノテーションはコードに注釈として補足を加えることで、プログラムの動作を変更したり、開発時のルールを統一できたり、フレームワークに処理を指示したりできる仕組みです。アノテーションには以下の種類が存在します。

マーカーアノテーション

文字通りクラスやメソッドなどに印を付けるために使うアノテーション。

データを持たせることができない。

単一値アノテーション

1つのデータを持つアノテーション。メソッド名にはvalueという名前をつけるのが一般的な慣習。

フルアノテーション

複数(少なくとも二つ以上)のデータを持つアノテーション。

メタアノテーション

アノテーションに付与するアノテーション。アノテーションを独自で作る際に、保持や継承のルール等を定義できます。



2.Springにおけるアノテーションの仕組み


Javaプログラムとフレームワーク等を使用してアプリケーションを開発する場合、データ・ファイルを連携させるために設定情報を記述する必要があります。そのひとつの方法として、設定ファイルに記述するやり方があります。

しかし、設定ファイルに記述する方法は、ただでさえ多くて分かりづらいSpringの設定ファイル増やしてしまうことになり、またJavaプログラムのソースコードと設定ファイルを合わせてみないと動きが分からない等のデメリットがあります。

一方、アノテーションはJavaプログラムのソースコード内に、データ・ファイルを連携させる情報を記述するやり方で、Springフレームワークにおいても頻繁に使用されます。

「AOP(アスペクト指向プログラミング)」が効率よく実現できたり、DIコンテナにコンポーネントを自動登録して呼び出したりと非常に便利な仕組みです。

※Spring Frameworkの記事へ内部リンク


3.Springでよく使われるアノテーション40選


以下はSpringで実際にコードを書いていく際によく出会うアノテーションの一覧です。

大まかに分類しており、概要のみの記載となりますので、メモ代わり・もしくは改めて振り返りたい時等にぜひ活用してください。なお、詳細が知りたい場合は公式のJavadocを読むことをお勧めします。

全般的な範囲の広いアノテーション

@Autowired

DI(依存性の注入)を担うアノテーションで、記述するだけで他のクラスを呼び出すことができます。逆にこのDIを行わないと、都度newを書いてクラスを呼び出さないといけなくなります。

@Bean

Springの設定ファイル(applicationContext.xml)で管理している、クラスを定義する「bean」を、アノテーションで定義します。@Configulation にて関連する @Bean を起動させます。

@Component

SpringのDIコンテナにbeanとして登録したいクラスへ付与します。Spring MVCでよく使われる@Controller、@Service、@Repositoryは@Component を継承しています。

@Configuration

XMLに記述するような設定を、ソースコードに書く場合にクラスに付与します。@beanを付与したメソッドで構成されます。

コントローラクラスに使うもの

@Controller

画面遷移を制御したり、Service 層(メイン処理)の呼出を行います。多くの場合はThymeleafでレンダリングしたものがレスポンスとなります。また、付与することでSpirngのコンポーネントとして認識され、ApplicationContextに登録されます。

@RestController

APIのコントローラに付与します。戻り値をStringにしたものがそのままクライアントへのレスポンスとなります。

@Responsebody

メソッドに付与すると戻り値がそのまま返ります。

@RequestMappng

コントローラに付与して、リクエスト URL に対してどのメソッドの処理を実行するかを定義します。

@GetMapping

GET リクエストを処理する@RequestMappngの簡略アノテーションです。

@PostMapping

POSTリクエストを処理する@RequestMappngの簡略アノテーションです。

@RequestParam

URLに含まれるクエリパラメータや、メッセージボディに含まれるポストパラメータを受け取れます。

@ModelAttribute

メソッドの戻り値を、Thymeleafで使用する変数へ対応付けます。マッピングされたメソッドの前に実行されます。

@ControllerAdvice

コントローラクラスでオブジェクトバインディングや、エラーハンドリングに特化したアドバイスを作成する際に付与します。

リポジトリクラス・データアクセスクラスに使うもの

@Repository

データ層のクラスに付与し、DAO等のDBアクセスを行います。付与することでSpirngのコンポーネントとして認識され、ApplicationContextに登録されます。

@Entity

エンティティクラスであることを示します。

@Table

エンティティに対応するテーブル名を指定します。

複数指定する場合は、@SecondaryTable(s)というアノテーションが別にあります。

@id

主キーを指定するアノテーションです。複合主キー時は@EmbeddedIdを使います。

@Data

対象クラスにgetter/setterでアクセスすることを可能とします。

equals()メソッドやtoString()メソッドが使えるようになります。

サービスクラスに使うもの

@Service

ビジネスロジック・アルゴリズム等が書かれた処理を提供します。付与することでSpirngのコンポーネントとして認識され、ApplicationContextに登録されます。

@Transactional

DBを更新する際にトランザクションを管理・制御(例外が起こった時に自動でロールバック)する役割を持ちます。

その他便利なアノテーション

@SpringBootApplication

Spring Bootフレームワークの自動構成を有効にするアノテーションです。

三つ(@EnableAutoConfiguration・@ComponentScan・@Configuration)の機能を持ます。

@EnableScheduling

LinuxのCronのような書き方で、スケジューリングされたメソッド実行を実装できるようになります。


4.バリデーションを行うアノテーション


Bean Validationは対象クラスにチェックに応じたアノテーションを付与して使用します。

以下は入力値やロジックによるチェック時によく使用されるバリデーション用アノテーションです。

@Validated

これを付与すると自動的にバリデーションしてくれます。

@AssertTrue

Trueかどうかをチェックします。

@AssertFalse

Falseかどうかをチェックします。

@Null

オブジェクトの値がNULLであることチェックします。

@NotNull

オブジェクトの値がNULLでないことをチェックします。

フィーム未入力はNULLではなく空文字になるので注意が必要です。

@NotBlank

文字列に空白文字(半角スペース・タブ文字)以外が含まれていることをチェックします。

@Max(value)

値が指定した最大値以下かどうかをチェックします。指定はlong型なので小数の場合は、以下@DecimalMaxを使用します。

@Min(value)

値が指定した最小値以上かどうかをチェックします。@Max同様に、小数値には@DecimalMinを使用します。

@DecimalMax(value, inclusive)

値が指定した最大値以下かどうかをチェックします。inclusiveをfalseとした場合、値が指定された最大値未満となります。

@DecimalMin(value, inclusive)

値が指定した最小値以上かどうかをチェックします。inclusiveをfalseとした場合、値が指定された最小値超過(より大きい)となります。

@Positive

値が正数であることをチェックします。

@PositiveOrZero

値が正数か0であることをチェックします。

@Negative

値が負数であることをチェックします。

@NegativeOrZero

値が負数か0であることをチェックします。

@Digits(integer, fraction)

値が指定した桁数以内であることをチェックします。

@DateTimeFormat(Date format)

引数として渡した日付か形式と一致するかチェックします。

@Size(max or min=value)

文字数が指定の範囲かをチェックします。

@Email

値が指定した整数部の桁数および小数部の桁数以内であることをチェックします。

@Pattern(regex, flags)

文字列が引数として渡した正規表現と一致するかどうかチェックします。



5.Spring Frameworkを利用する際に必要なスキル


Springはあくまでフレームワークですので、アプリケーションを開発して本番環境で稼働させたりWebで公開したりするにはフレームワーク以外の知識も必要となってきます。以下、Spring Frameworkを使う上で、身につけておくべき知識やスキルについて紹介します。

Java

当然と言えば当然ですが、SpringはJavaフレームワークですので、プログラミング言語にJavaが使用されています。開発を進めるにしても、フレームワークをカスタマイズしていくにも少なくともJavaで簡単なレベルのアルゴリズムやロジックを記載できる力は必要です。

Webサーバー・DBの知識

フレームワークは教科書や参考記事等に書いてある通りにコードを書くだけでアプリケーションを動かすことを可能にしてくれますが、本番環境にデプロイするのであればアプリケーション単体では動きません。Web3層構造であればWebサーバーやデータベースとの連携も行う必要があり、それらの仕組みや設定等に通ずることも必要となってきます。


この記事をシェア