Spring Bootアノテーション完全ガイド

主要アノテーション一覧

@SpringBootApplication: @ComponentScan、@Configuration、および@EnableAutoConfigurationアノテーションを含みます。@ComponentScanによりSpring BootはConfigurationクラスをスキャンし、プログラムのコンテキストに追加します。

@Configuration: SpringのXML設定ファイルに相当します。Javaコードを使用して型安全性を確認できます。

@EnableAutoConfiguration: 自動設定を有効にします。

@ComponentScan: コンポーネントスキャンを実行し、一部のBeanを自動的に発見して設定します。

@Component: CommandLineRunnerと併用して、アプリケーション起動後に基本的なタスクを実行できます。

@RestController: @Controllerと@ResponseBodyの組み合わせであり、RESTスタイルのコントローラーであることを示します。

@Autowired: 依存関係を自動的にインポートします。

@PathVariable: URLパラメータを取得します。

@JsonBackReference: 埋め込み外部リンクの問題を解決します。

@RepositoryRestResource: spring-boot-starter-data-restと併用します。

主要アノテーションの詳細

@SpringBootApplication

Spring Bootにアプリケーションに必要な設定を自動的に行わせることを宣言します。このアノテーションは@Configuration、@EnableAutoConfiguration、@ComponentScanの3つの設定と同等です。

package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ApplicationStarter {
    public static void main(String[] args) {
        SpringApplication.run(ApplicationStarter.class, args);
    }
}

@ResponseBody

このアノテーションが付けられたメソッドの戻り値が直接HTTPレスポンスボディに書き込まれることを示します。非同期でデータを取得する際に使用され、通常は@RequestMappingと併用されます。

@RequestMapping("/api/status")
@ResponseBody
public String checkStatus(){
    return "正常稼働中";
}

@Controller

コントローラークラスを定義するために使用されます。Springプロジェクトでは、コントローラーがユーザーからのURLリクエストを対応するサービスインターフェース(サービス層)に転送する役割を担います。

@Controller
@RequestMapping("/user")
public class UserController {
    
    @Autowired
    private UserService userService;
    
    @RequestMapping("/profile")
    public String showProfile(Map model) {
        model.put("userInfo", userService.getCurrentUser());
        return "userProfile";
    }
}

@RestController

コントローラーレイヤーのコンポーネントを示すために使用されます(Strutsのactionに相当)。@ResponseBodyと@Controllerの組み合わせです。

package com.demo.api.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/data")
public class DataController {
    
    @RequestMapping("/info")
    public String getInfo() {
        return "システム情報: 正常";
    }
}

@RequestMapping

ルーティング情報を提供し、URLからコントローラーの具体的なメソッドへのマッピングを担当します。

@EnableAutoConfiguration

Spring Bootの自動設定:追加したjar依存関係に基づいてSpringアプリケーションを自動的に設定しようと試みます。クラスパスにHSQLDBが存在し、手動でデータベース接続Beanを設定していない場合、メモリ内データベースが自動的に設定されます。

@ComponentScan

スキャンするパスを定義し、そこから設定が必要なクラスを見つけてSpringのBeanコンテナに自動的に設定します。@Controller、@Service、@Repository、@Componentアノテーションが付けられたクラスがデフォルトでスキャン対象となります。

@Configuration

従来のXML設定ファイルに相当します。サードパーティライブラリがXMLファイルを使用する必要がある場合、@Configurationクラスをプロジェクトの設定メインクラスとして使用することをお勧めします。@ImportResourceアノテーションを使用してXML設定ファイルを読み込むことができます。

@Import

他の設定クラスをインポートするために使用します。

@ImportResource

XML設定ファイルを読み込むために使用します。

@Autowired

依存するBeanを自動的にインポートします。

@Service

通常、サービスレイヤーのコンポーネントを修飾するために使用されます。

@Repository

@Repositoryアノテーションを使用すると、DAOまたはリポジトリが例外変換を提供することが保証されます。このアノテーションで修飾されたDAOまたはリポジトリクラスはComponentScanによって発見され設定されますが、XML設定項目を提供する必要はありません。

@Bean

@Beanで注釈されたメソッドは、XMLで設定されたBeanに相当します。

@Value

Spring Boot application.propertiesで設定されたプロパティの値を注入します。

@Value(value = "#{app.message}")
private String applicationMessage;

@Inject

デフォルトの@Autowiredと同等ですが、required属性がありません。

@Component

一般的なコンポーネントを指し、コンポーネントを分類しにくい場合にこのアノテーションを使用してマークできます。

@Qualifier

同じ型のBeanが複数ある場合、@Qualifier("name")を使用して指定できます。@Autowiredと併用します。

@Autowired
@Qualifier(value = "userService")
private UserService userService;

@Resource

括弧内の内容がない場合、デフォルトでbyNameになります。@Autowiredと同様のことを行います。

JPA関連アノテーション

@Entity, @Table

これがエンティティクラスであることを示します。通常はこの2つのアノテーションを一緒に使用しますが、テーブル名とエンティティクラス名が同じ場合は@Tableを省略できます。

@MappedSuperclass

親クラスであることが確実なエンティティに使用されます。親クラスのプロパティは子クラスで継承できます。

@NoRepositoryBean

通常は親クラスのリポジトリとして使用され、このアノテーションがあるとSpringはそのリポジトリをインスタンス化しません。

@Column

フィールド名と列名が同じ場合は省略できます。

@Id

その属性が主キーであることを示します。

@GeneratedValue

主キーの生成戦略を示します(Auto、IDENTITY、nativeなど)。Autoは複数のデータベース間で切り替え可能であることを示します。

@SequenceGenerator

nameがシーケンスの名前、sequenceNameがデータベースのシーケンス名です。

@Transient

その属性がデータベーステーブルのフィールドへのマッピングではないことを示します。ORMフレームワークはこの属性を無視します。

@JsonIgnore

JSONシリアライズ時にJava Beanの一部の属性を無視するように作用します。シリアライズとデシリアライズの両方に影響します。

@JoinColumn

一对一: このテーブルが別のテーブルを指す外部キー。一对多: 別のテーブルがこのテーブルを指す外部キー。

@OneToOne, @OneToMany, @ManyToOne

Hibernate設定ファイルの一对一、一对多、多対一に対応します。

SpringMVC関連アノテーション

@RequestMapping

リクエストアドレスマッピングを処理するアノテーションで、クラスまたはメソッドに使用できます。クラスに使用すると、クラス内のすべての応答リクエストメソッドはそのアドレスを親パスとして使用します。6つの属性があります:

  • params: リクエストに特定のパラメータ値が含まれている必要がある場合にそのメソッドで処理させる。
  • headers: リクエストに特定のヘッダー値が含まれている必要がある場合にそのメソッドでリクエストを処理させる。
  • value: リクエストの実際のアドレスを指定する。
  • method: リクエストのメソッドタイプ(GET、POST、PUT、DELETEなど)を指定する。
  • consumes: リクエストのコンテンツタイプ(Content-Type)を指定する。
  • produces: 返されるコンテンツタイプを指定する。

@RequestParam

メソッドのパラメータの前に使用されます。request.getParameter("a")に相当します。

@PathVariable

パス変数を取得します。

@RequestMapping("/user/get/mac/{macAddress}")
public String getByMacAddress(@PathVariable String macAddress) {
    // 処理を実行
    return "MAC: " + macAddress;
}

グローバル例外処理

@ControllerAdvice

@Componentを含みます。スキャン可能です。例外を統一的に処理します。

@ExceptionHandler

メソッドの前に使用され、この例外が発生した場合に以下のメソッドを実行します。

Lombokアノテーション

@Getter, @Setter

@Setter: プロパティに注釈を付け、settingメソッドを提供する。

@Getter: プロパティに注釈を付け、gettingメソッドを提供する。

@Data

クラスに注釈を付け、クラスのすべてのプロパティのgettingおよびsettingメソッド、equals、canEqual、hashCode、toStringメソッドを提供する。

@NoArgsConstructor, @AllArgsConstructor

@NoArgsConstructor: クラスに引数なしのコンストラクタを提供する。

@AllArgsConstructor: クラスにすべての引数を含むコンストラクタを提供する。

@NonNull

プロパティに注釈を付け、nullでない必要があることを示す。

エンティティライフサイクルイベント

@PreUpdate, @PostUpdate

@PreUpdate: エンティティの状態がデータベースに同期される前にトリガーされます。

@PostUpdate: エンティティの状態がデータベースに同期された後にトリガーされます。

@PrePersist, @PostPersist

@PrePersist: エンティティオブジェクトがデータベースに挿入される過程で発生します。

@PostPersist: データがデータベースに挿入された後に発生します。

@PreRemove, @PostRemove

@PreRemove: エンティティがデータベースから削除される前にトリガーされます。

@PostRemove: エンティティがデータベースから削除された後にトリガーされます。

@Configurationと@Bean

@Configuration

クラスに注釈を付け、そのクラスをSpringのXML設定ファイルのとして扱います。Springコンテキスト(アプリケーションコンテキスト)を設定する役割を果たします。

package com.config.demo;

@Configuration
public class AppConfig {
    public AppConfig() {
        System.out.println("Springコンテキストの初期化...");
    }
}

@Bean

メソッドに注釈を付け(インスタンスを返すメソッドに相当し)、SpringのXML設定ファイルのと同等です。Beanオブジェクトを登録する役割を果たします。

package com.config.demo;

@Configuration
public class AppConfig {
    
    @Bean
    @Scope("prototype")
    public DataService dataService() {
        return new DataService();
    }
}

注:

  • @BeanでBeanの名前を指定しない場合、デフォルトで注釈が付けられたメソッド名と同じになります。
  • @Beanのデフォルトのスコープはシングルトンです。@Scope("prototype")を設定してプロトタイプスコープにできます。
  • @Beanの役割はBeanオブジェクトを登録することなので、@Component、@Controller、@Service、@Repositoryなどのアノテーションを使用してBeanを登録することもできます。その場合は@ComponentScanアノテーションを設定して自動スキャンを行う必要があります。

まとめ

Spring Bootのアノテーションはアプリケーション開発を簡素化し、設定を自動化する強力なツールです。これらのアノテーションを適切に使用することで、よりクリーンで保守性の高いコードを書くことができます。

タグ: Spring Boot アノテーション Java 開発

5月16日 06:58 投稿