7.

Spring Frameworkのアノテーション一覧

編集
この記事の要点
  • Spring Framework / Spring Boot でよく使う主要アノテーションを役割別に整理
  • レイヤー: Web 層 (@Controller, @RestController) / Service 層 (@Service) / Repository 層 (@Repository) / DI (@Autowired, @Qualifier) / 設定 (@Configuration, @Bean)
  • @Component は汎用、@Service / @Repository / @Controller はそれぞれ意味付きで特殊化
  • Spring Boot は @SpringBootApplication 一つで @Configuration + @EnableAutoConfiguration + @ComponentScan をまとめて有効化

 

レイヤー別 主要アノテーション一覧

① ステレオタイプ(Bean 登録)

Spring コンテナに Bean として登録されるクラスにつけるアノテーション。

アノテーション用途備考
@Component汎用 Bean 登録下記 3 つの親、特に意味付けがない時に使う
@ControllerWeb MVC コントローラHTML / JSP を返す
@RestControllerREST API コントローラ@Controller + @ResponseBody 相当
@Serviceビジネスロジック層機能的には @Component と同じだが、意味付けで使う
@Repositoryデータアクセス層DB 例外を Spring の DataAccessException に変換

② DI(依存性注入)

アノテーション用途
@Autowired型による自動注入。フィールド・コンストラクタ・セッターに付与可
@Qualifier("name")同型 Bean が複数ある時、名前で特定
@Value("${app.host}")プロパティ値 / 環境変数を注入
@Resource(name="...")JSR-250、名前優先で注入
@InjectJSR-330、@Autowired と同等
@Lazy必要になるまで Bean 初期化を遅延

③ 設定・構成

アノテーション用途
@ConfigurationJavaConfig クラス(XML 設定の代替)
@Bean@Configuration 内でメソッドを Bean 化
@ComponentScan指定パッケージ配下の @Component を自動検出
@PropertySource("...")外部プロパティファイルの読み込み
@Profile("dev")環境別 Bean(プロファイル)
@Conditional条件付き Bean 登録

④ Spring MVC(Web 層)

アノテーション用途
@RequestMapping("/path")URL とハンドラーメソッドの紐付け(全メソッド対応)
@GetMapping("/path")GET 専用ショートカット
@PostMapping("/path")POST 専用
@PutMapping / @DeleteMapping / @PatchMapping各 HTTP メソッド専用
@PathVariableURL パスから値を取得(/users/{id}
@RequestParamクエリパラメータ / フォームから取得
@RequestBodyリクエストボディ (JSON 等) をオブジェクトに変換
@ResponseBody戻り値をレスポンスボディに直接書き出し
@ResponseStatus(HttpStatus.OK)HTTP ステータスコード指定
@ModelAttributeフォームバインディング・モデル属性
@CrossOriginCORS 設定
@ExceptionHandlerコントローラ内例外ハンドラ
@ControllerAdviceグローバル例外ハンドラ

⑤ Spring Data JPA

アノテーション用途
@EntityJPA エンティティクラス
@Table(name="users")テーブル名指定
@Id主キー
@GeneratedValue(strategy=...)主キー自動生成(IDENTITY / SEQUENCE / AUTO)
@Column(name="user_name", nullable=false)カラム属性
@OneToMany / @ManyToOne / @OneToOne / @ManyToMany関連
@JoinColumn(name="user_id")外部キーカラム
@Query("SELECT u FROM User u WHERE ...")カスタムクエリ
@Modifying更新クエリ(@Query 付き)
@Transactionalトランザクション境界

⑥ Spring Boot 専用

アノテーション用途
@SpringBootApplicationメインクラス。@Configuration + @EnableAutoConfiguration + @ComponentScan
@EnableAutoConfiguration自動設定を有効化
@SpringBootTestテスト時に Spring コンテキストを起動
@ConfigurationProperties(prefix="app")プロパティを POJO にバインド
@EnableSchedulingスケジュールタスクを有効化
@Scheduled(cron="0 0 * * * *")定期実行
@Async非同期実行

典型的なクラス構成例

@RestController
@RequestMapping("/api/users")
@RequiredArgsConstructor  // Lombok: final フィールドのコンストラクタ自動生成
public class UserController {
    private final UserService userService;

    @GetMapping("/{id}")
    public UserDto get(@PathVariable Long id) {
        return userService.findById(id);
    }

    @PostMapping
    @ResponseStatus(HttpStatus.CREATED)
    public UserDto create(@RequestBody @Valid UserCreateRequest req) {
        return userService.create(req);
    }
}

@Service
@RequiredArgsConstructor
public class UserService {
    private final UserRepository userRepository;

    @Transactional(readOnly = true)
    public UserDto findById(Long id) {
        User user = userRepository.findById(id)
            .orElseThrow(() -> new EntityNotFoundException());
        return UserDto.from(user);
    }
}

@Repository
public interface UserRepository extends JpaRepository {
    Optional findByEmail(String email);
}

@Component vs @Service vs @Repository vs @Controller の違い

すべて Bean 登録のためのアノテーションで、機能的にはほぼ同じです。意味付けと AOP の対象として区別します:

  • @Component: 汎用、何の役割でもない時
  • @Service: ビジネスロジック層であることを明示
  • @Repository: DAO 層であることを明示 + DB 例外を DataAccessException に自動変換
  • @Controller: Web MVC コントローラ + Spring MVC ハンドラとして認識

機能差があるのは @Repository(例外変換)と @Controller(MVC 認識)のみ。機能と意味の両方で使い分けるのが習慣。

関連記事

編集
Post Share
子ページ
  1. @After
  2. @Autowired
  3. @Bean
  4. @Before
  5. @Column
  6. @Component
  7. @Configuration
  8. @Controller
  9. @Data
  10. @Entity
  11. @GeneratedValue
  12. @Id
  13. @Modifying
  14. @PathVariable
  15. @PropertySource
  16. @Repository
  17. @RequestBody
  18. @RequestMapping
  19. @ResponseBody
  20. @RestController
  21. @Service
  22. @SpringBootApplication
  23. @Table
  24. @Transactional
  25. @Value
同階層のページ
  1. インストール(eclipseプラグイン)
  2. クイックスタート
  3. プロジェクトの作成
  4. Spring Bootプロジェクトの作成
  5. Spring Bootプロジェクトの実行
  6. Spring BootでHello World!
  7. アノテーション一覧
  8. DB接続設定からエンティティおよびリポジトリの作成、値の取得まで(JPA編)
  9. DB接続設定や値の取得(JdbcTemplate編)
  10. ビューから値をモデルに格納しコントローラーで受け取る方法
  11. コントローラーにてモデルに値を格納してビューに渡す方法
  12. テンプレートエンジン
  13. ModelとModelAndViewの違い
  14. AOPの使用方法
  15. classpath: 内部ファイルの読み込み
  16. file: 外部ファイルの読み込み
  17. CSVファイルアップロード方法(Ajax)
  18. CSVファイルダウンロード方法(Ajax)
  19. Spring Bootプロジェクトのビルドと本番環境へのデプロイ方法(内部tomcat使用)
  20. Application.propertiesの環境依存設定の分割方法
  21. JPAにおけるEntityManagerの取得方法
  22. JPAにおけるjava.sql.Connectionの取得方法
  23. エラー一覧
  24. jarの引数を受け取る方法
  25. Spring BootでGmailからメール送信
  26. 複数のDBに接続する設定(Spring Boot & JPA編)
  27. ポート番号の変更
  28. Basic認証の実装と特定のURLに限定する方法
  29. Spring SecurityのBasic認証の無効化
  30. 独自のエラーページを定義する方法
  31. プロパティファイルの値やjar実行時の引数を取得する方法