Spring 5でできることは?4からの変更点や互換性について解説
- 1.そもそもアノテーションとは
- 2.Springにおけるアノテーションの仕組み
- 3.Springでよく使われるアノテーション40選
- 4.バリデーションを行うアノテーション
- 5.Spring Frameworkを利用する際に必要なスキル
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)
文字数が指定の範囲かをチェックします。
値が指定した整数部の桁数および小数部の桁数以内であることをチェックします。
@Pattern(regex, flags)
文字列が引数として渡した正規表現と一致するかどうかチェックします。
5.Spring Frameworkを利用する際に必要なスキル
Springはあくまでフレームワークですので、アプリケーションを開発して本番環境で稼働させたりWebで公開したりするにはフレームワーク以外の知識も必要となってきます。以下、Spring Frameworkを使う上で、身につけておくべき知識やスキルについて紹介します。
Java
当然と言えば当然ですが、SpringはJavaフレームワークですので、プログラミング言語にJavaが使用されています。開発を進めるにしても、フレームワークをカスタマイズしていくにも少なくともJavaで簡単なレベルのアルゴリズムやロジックを記載できる力は必要です。
Webサーバー・DBの知識
フレームワークは教科書や参考記事等に書いてある通りにコードを書くだけでアプリケーションを動かすことを可能にしてくれますが、本番環境にデプロイするのであればアプリケーション単体では動きません。Web3層構造であればWebサーバーやデータベースとの連携も行う必要があり、それらの仕組みや設定等に通ずることも必要となってきます。