Spring Boot アノテーション一覧

Spring Bootのアノテーションの一覧です。
間違い等あればご指摘ください。

<h4>@SpringBoot</h4>
	<p>メインメソッドを含んだクラスに付与すると「SpringBootアプリケーション」と認識される</p>

<h4>@Controller</h4>
	SpringMVCで、アプリケーション層のコントローラーに付与
	Javaクラスに付与すると、このクラスはコントローラーと認識してくれる。
	thymeleafを使用したHTMLをレスポンスするときに使用
	
<h4>@RestController</h4>
	jsonやxmlをレスポンスするときに使用
    RestAPI、もしくはRestfulAPIを呼び出す時はReact.jsなどのFEから呼び出す必要がある

<h3>Dependency Injection</h3>
<h4>@Autowired</h4>
    依存性の注入
	インスタンス生成するクラスに付与
 
<h4>@Component</h4>
	@Controller・@Service・@Repogitory・@RestController・@Configration・@RestControllerAdviceの用途以外のインスタンス生成対象のクラスに付与

<h4>@ComponentScan</h4>
	別パッケージのコンポーネントを使用するときに付与
	@Componentや@Serviceなどを付与してもインポートできない場合に使う

<h4>@Service</h4>
	ドメイン層の「業務処理」に付与。業務ロジックを@Serviceクラスに書く
	業務処理系のクラスを@Autowiredしたい場合に書く。

<h4>@Repogitory</h4>
	インフラストラクチャ層のデータベースアクセス処理に付与
	@Serviceと同じく@Autowiredしたい場合に書く。
    ORMがDataJPAの時は不要。

<h3>通信形式（GET POST PUT DELETE）</h3>
<h4>@GetMapping</h4>
<ul>
<li>URLに入力フォームのラベル及び、値が付く通信形式で、メソッドとマッピングさせる</li>
<li>DBからデータを取得する通信形式</li>
</ul>

<h4>@PostMapping</h4>
URLに入力フォームのラベル及び、値が付かない通信形式で、メソッドとマッピングさせる

<h4>@RequestMapping</h4>
<p>URLとクラスやメソッドとマッピングさせる。
GETやPOSTなどの通信形式も指定できる</p>

<table border="1">
    <thead>
        <tr>
            <td>属性</td>
            <td>説明</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>value</td>
            <td>URLを指定</td>
        </tr>
        <tr>
            <td>method</td>
            <td>method=RequestMethod.POSTなど</td>
        </tr>
    </tbody>
<table>

<h4>@RequestParam()</h4>
	リクエスト（クエリ）パラメーターや、リクエストボディを受け取ることが出来る
 
 <table border="1">
     <thead>
         <tr>
             <th>属性</th>
             <th>説明</th>
         </tr>
     </thead>
     <tbody>
         <tr>
             <td>name value</td>
             <td>この二つは同じ</td>
        </tr>
        <tr>
             <td>required</td>
             <td>パラメーターはデフォルトでは必須のため、パラメーター指定を任意にする場合、falseを指定</td>
        </tr>
        <tr>
            <td>defaultValue</td>
            <td>リクエストで値を受け取るか、判らない場合に付与</td>
    </tbody>
</table>
	 
<h3>Lombok</h3>
<h4>@Data</h4>
	セッター・ゲッターメソッドが自動生成されるほか、toStringなど、オブジェクトクラスに定義されているメソッドを自動生成

<h4>@NoArgsConstructor</h4>
	引数のないコンストラクタが自動生成される

<h4>@AllArgsConstructor</h4>
	全てのメンバ変数を引数としたコンストラクタが生成される
 
<h3>モデル</h3>
<h4>@Model</h4>
	主にViewに値を渡すときに使用

<h4>@ModelAttribute</h4>
	formの入力項目(name属性)と一致するフィールドに値が設定される
	インスタンス化される
	このアノテーションを使うとmodel.addAttribute();は不要になる
 
<h3>セッション</h3>
<h4>@SessionAttribute</h4>
	Spring Sessionという名称でクラスに設定すると、入力フォームの値が保持される。
	使用する際はインスタンス生成するメソッドを作成。
 
<h3>入力内容の検証</h3>
<h4>@Valid</h4>
	単一入力チェックをする際に用いる

<h4>@Validated</h4>
	フィールドの検証順序を制御したり、複数の検証をまとめたりする機能がある。
    @Validより扱いが機能が多い分、難しい

<h3>ORM</h3>
<h4>@table</h4>
	DataJPA使用時に利用可能
	引数に任意の名前を渡すことでテーブル名を指定することができて省略も可能。その場合はクラス名がテーブル名となる。

<h4>@Entity</h4>
	エンティティクラスに使用
	DBに登録するデータの変数などを定義
	Data JPAの時に使用

<h4>@Mapper</h4>
	MyBatisを利用する場合に使用可能。
	@Mapperを利用する場合はMavenの場合、pom.xmlに依存関係を記述
	@Mapperの役割はxmlファイルに記述しているインターフェース内のSQLを実行するためのメソッドを動かす

@MapperScan
	@Mapperアノテーションが記述されているクラスのパスを設定してコントローラークラスに認識させる。
	@Mapperだけ記述してエラーになるようなら@MapperScanを用いるか、xmlファイルの内容を見直すかになる。

@IdClass(mainPrimaryKey.class)
	正規化されていないDBでエンティティクラスに付与するもの
	テーブルで複数主キーを設定していれば必要になるクラスで、主キーの数だけフィールドを定義する
	@IdClassを付与したクラスは上記クラスのフィールドを持つ必要がある
	あとは自由にフィールドを定義できる
	
@Builder
	特定のクラスをインスタンス化するときに使用する技術で、オブジェクトの生成過程を抽象化し、動的なオブジェクト生成が可能
	複数のコンストラクタを設定しなくても、様々なフィールドを持ったオブジェクトを柔軟に定義でき、引数の挿入順序を自由に設定できる

 <h3>その他</h3>
 @EqualsAndHashCode
 Objectクラスのequals()メソッドとHashcode()メソッドを自動生成

 属性
     callSuper=(true false)  メソッドを自動生成し、親クラスのフィールドまでをカバーするか設定