Lombok
実務の Spring プロジェクトでは、getter/setter やコンストラクターを Lombok で自動生成します。本研修は仕組みの理解を優先して手書きしますが、実務のコードでは Lombok がよく使われます。
1. Lombok とは
Section titled “1. Lombok とは”Lombok は、クラスに付けたアノテーションから getter・setter・コンストラクターなどを生成するライブラリーです。生成は、依存関係の追加とビルド時の処理で行われます。
1-1. アノテーションによる生成
Section titled “1-1. アノテーションによる生成”org.projectlombok:lombok を 依存関係 として pom.xml に追加すると、ビルド時にアノテーションが処理され、ソースには書かれていないメソッドがビルド後のクラスに生成されます。
1-2. 主なアノテーション
Section titled “1-2. 主なアノテーション”| アノテーション | 生成されるもの |
|---|---|
@Getter / @Setter | 各フィールドの getter / setter |
@RequiredArgsConstructor | final フィールドを引数に取るコンストラクター |
@AllArgsConstructor / @NoArgsConstructor | 全フィールド / 引数なしのコンストラクター |
@Data | @Getter・@Setter・@ToString・@EqualsAndHashCode・@RequiredArgsConstructor をまとめたもの |
@Slf4j | ロガーの log フィールド |
2. これまでのクラスへの適用
Section titled “2. これまでのクラスへの適用”手書きした BookForm(データクラス)と BookController(コンストラクターインジェクション)の getter・setter やコンストラクターは、Lombok のアノテーションで生成できます。
2-1. データクラス
Section titled “2-1. データクラス”リクエストパラメーター の BookForm は、フィールドごとに getter・setter を書きました。
public class BookForm { private String title; private int price;
public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; }}@Data を付けると、getter・setter(と toString・equals/hashCode)が生成され、フィールドの宣言だけが残ります。
@Datapublic class BookForm { private String title; private int price;}値を変えない不変のクラスには @Getter で getter だけを生成します。Java の record を使えば、Lombok なしでアクセサー・equals/hashCode・toString が生成されます。
2-2. コンストラクターインジェクション
Section titled “2-2. コンストラクターインジェクション”サービスとリポジトリ の BookController は、注入する BookService を受け取るコンストラクターを書きました。
@Controllerpublic class BookController { private final BookService bookService;
public BookController(BookService bookService) { this.bookService = bookService; } // books メソッドなど}@RequiredArgsConstructor は final フィールドを引数に取るコンストラクターを生成するので、このコンストラクターを省けます。BookService や BookRepository の注入も同じです。
@Controller@RequiredArgsConstructorpublic class BookController { private final BookService bookService; // books メソッドなど}final フィールドがあってコンストラクターが見当たらないクラスは、@RequiredArgsConstructor がコンストラクターを生成しています。