Spring Boot アノテーション集

最初にこのくらい知ってたら良かった…と思うSpring Bootのよく使うアノテーションのまとめ。
詳細は省いてあるので、公式のJavaDocを読むこと。

全体的に使われるもの

@Autowired
Dependency Injectionのために使う。必修。
ただし最近はコンストラクタインジェクションが推奨されている。
@Bean
クラスのインスタンス生成に使用するメソッドを対応付けるためのもの。
@Autowiredでインスタンスを生成するとき、このメソッドが使われる。
下手に使うとAuto Configurationが作動しなくなり、不具合の原因になるので注意。

クラスに付けるもの

@Component
Dependency Injectionして使いたいクラスに付与する。
@Configuration
SpringだとXMLで書くような設定をソースで書く場合、クラスに付与する。

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

@Service
サービスクラスに付与する。現時点では、@Componentとほぼ同じ役割と思ってよい。
@Transactional
トランザクション境界を定義するために使う。
どこでも使うことはできるが、制約や分かりやすさ等の面から、サービスクラスにつけると良い。

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

@RestController
APIのコントローラに付与する。
このコントローラでは、戻り値をStringにしたものがそのままクライアントへのレスポンスとなる。
@Controller
ページ(UI)を持つコントローラに付与する。
このコントローラでは戻り値のStringに対応するテンプレートを、Thymeleafでレンダリングしたものがレスポンスとなる。
@Responsebody
@Controllerでも、これをメソッドに付けると戻り値がそのまま返る。デバッグ時に便利。
@RequestMapping, @GetMapping, @PostMapping
URLに対するHTTPリクエストを、メソッドに対応付けるために付与する。
@ModelAttribute
メソッドの戻り値を、Thymeleafで使用する変数へ対応付ける。

リポジトリクラスに使うもの

@Repository
DBアクセスを行う、DAOの役割を担うクラスへ付与する

エンティティクラスに使うもの

@Entity, @Table, @Id, @OneToMany, @ManyToOne, @OneToOne, @ManyToManyなど
厳密にはSpringのアノテーションではないが、Spring Data JPAを使うなら必修。
これらを使ってテーブルを設計する。

知っていると便利なもの

@ConfigurationProperties
application.propertiesに独自の値を定義できる。
@EnableScheduling, @Scheduled
Linuxのcronのような書式で、スケジューリングされたメソッド実行を実装できる。
@EnableRetry, @Retryable
エラーのリトライ処理を実装できる。

バリデーション関係

@Validated
これを付けておくと自動的にバリデーションしてくれる。
URLパラメータや、@ConfigurationPropertiesで定義したフィールドをバリデーションする。
@Min, @Max, @Size, @Pattern, @Nullなど
フォームなどをバリデーションの際にチェックする内容を指定する。数値の最小値・最大値や、文字列のサイズ、マッチする正規表現など。
TERASOLUNAのガイドラインによくまとまっている。

関連記事


  1. Spring Web MVCのAuto Configuration周辺のクラス図を描いてみた
  2. ModelMapperで1対1に対応しないフィールドのマッピング
  3. Spring Data JPAのgetOne()で遅延ロードエラー
  4. Spring BootアプリにFlywayを導入してみた
  5. Spring Data JPAのEntityクラスからDDLを生成する
  6. Open Session in Viewは使用すべきなのか?
  7. Spring BootをGoogle App Engineフレキシブル環境へデプロイする