主要アノテーション一覧
@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設定ファイルの
package com.config.demo;
@Configuration
public class AppConfig {
public AppConfig() {
System.out.println("Springコンテキストの初期化...");
}
}
@Bean
メソッドに注釈を付け(インスタンスを返すメソッドに相当し)、SpringのXML設定ファイルの
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のアノテーションはアプリケーション開発を簡素化し、設定を自動化する強力なツールです。これらのアノテーションを適切に使用することで、よりクリーンで保守性の高いコードを書くことができます。