Springにおけるアノテーションの役割
Javaとフレームワークを使用してアプリを作る場合、データ・ファイルを連携するために設定情報を記述する必要があります。
1つの方法として設定ファイルに記述するというのもありますが、設定ファイルに記述するとSpringの場合は設定ファイルが多くて分かりづらいのでこれ以上は増やしたくはないというのが一般的な考えのようです。
Spinrgの場合は、ソースコード内のアノテーションを利用してデータ・ファイルを連携させる情報を記述させます。
@Autowired
インスタンス変数の前にこの@Autowiredアノテーションを付けておくと、@Componentアノテーションのついたクラスから該当するクラスをnewしてインスタンスを入れてくれる。
■TestAnnotationController.java
@Controller public class TestAnnotationController { @Autowired private TestAnnotation testannotation; }
■TestAnnotation.java
@Service public class TestAnnotation { ...略 }
@Componentアノテーションはそのまま使われることは基本ありません。
@Controllerまたは@Serviceまたは@Repositoryが使われます。
TestAnnotationController.javaのtestannotationインスタンスには、@Component(Controller,Service,Repository)アノテーションが付いているクラスの中からTestAnnotationクラスを探し出して、newしてインスタンスを入れてくれます。
このような仕組みを依存性の注入といいます。
※DI(Dependency Injection)と略されます。
シンプルにまとめれば、記述するだけで他のクラスを呼び出すことができる。
このアノテーションを使わない場合は、毎回newをすることになる。
@ModelAttribute
@ModelAttributeアノテーションは2つの使い方があります。
- パラメータ内にアノテーションがある場合
- メソッドのアノテーションの場合
パラメータ内にアノテーションがある場合
@RequestMapping(...) public xxx TestAnnotation(@ModelAttribute Testobject obj, xxxx) { //ここのアノテーション ... }
のようなケースは「パラメータ内にアノテーションがある場合」になります。
このケースはリクエストで送られてきたフォームからデータを受け取る時に利用されます。
上記のコードだと、「obj変数にフォームの値を入れる」という挙動になります。
※GETリクエストのようにデータが送られてこない場合は、「new Testobject()」の空オブジェクトを生成します。
メソッドのアノテーションの場合
@ModelAttribute //ここのアノテーション public xxx CreateTestObject() { return new TestObject }
のようなケースは、「メソッドのアノテーションの場合」になります。
@Contolor内の@RequestMappingのメソッドの実行前にこのメソッドは呼び出されます。
CreateTestObjectメソッドがTestObjectオブジェクトを返すため、@RequestMapping内のメソッドでこの処理を利用する
というイメージです。
※生成されたオブジェクトをModelに自動的に付与されます。
View側で使用することができます。
@SessionAttributes
セッションに格納する型を指定するアノテーション。
アノテーションのtypes属性にセッションに格納するオブジェクトの型を指定して利用する。
@ModelAttributeアノテーションか、ModelのaddAttributeメソッドを使用して、Modelオブジェクトに追加されたオブジェクトの中から、この@SessionAttributesで指定した型と一致するものがセッションに格納される仕組み
@Controller @RequestMapping("wizard") @SessionAttributes(types = { Watablog.class, Engineerblog.class } ) // 型を指定する public xxx TestSpringController() { // ... }
この例だと、WatablogクラスとEngineerblogのオブジェクトがセッションに格納されるということ。
@Component
SpinrgのDIコンテナにbeanとして登録したいクラスにアノテーションを付けます。
@Controller、@Service、@Repositoryは@Componentを継承している。
@Controller
画面遷移、Service層(メインロジック)の呼び出しを行うアノテーションです。
一般的に、Thymeleafでレンダリングしたものがレスポンスになる。
このアノテーションを付けると、Springのコンポーネントとして認識されるので、ApplicationContextに登録されます。
@RestController
APIのコントローラに付与する。
戻り値をStringにしたデータがレスポンスになります。
@Respnsebody
メソッドに付与すると戻りがそのまま返る
@RequestParam
URLに含まれるクエリパラメータや、メッセージボディに含まれるポストパラメータを受け取ることができる。
@Data
対象クラスにgetter/setterでアクセスすることを可能とする。
equals()メソッドやtoString()メソッドが使えるようになる。
バリデーション系のアノテーション
バリデーションは対象のクラスでアノテーションを付けることでパラメータチェックができます。
最大値やNullなどの入力値のチェックが可能です。
@Validated
このアノテーションを付与すると自動的にバリデーションを行ってくれます。
@AssertTrue
Trueかどうかをチェックする
@AssertFalse
Trueかどうかをチェックする
@Null
オブジェクトの値がNULLであることをチェックする
@NotNull
オブジェクトの値がNULLではないことをチェックする
※フォーム未入力は空文字になってNULLではないので注意
@NotBlank
文字列に半角スペース、タブ文字などの空白文字以外が含まれているかチェックする
@DateTimeFormat
引数として渡された日付に対して形式通りかチェックする。
@Size(最大値or最小値=value)
文字数が指定の範囲かチェックする。
さいごに
最後まで読んでいただき、ありがとうございました。
もし、記載している内容が間違えていれば遠慮なくコメントしてください!
私自身の勉強になりますし、他の人がこの記事を見た時に間違えた情報を見ることになってしまうので💦