Skip to content
Playground

Lombok

実務の Spring プロジェクトでは、getter/setter やコンストラクターを Lombok で自動生成します。本研修は仕組みの理解を優先して手書きしますが、実務のコードでは Lombok がよく使われます。

Lombok は、クラスに付けたアノテーションから getter・setter・コンストラクターなどを生成するライブラリーです。生成は、依存関係の追加とビルド時の処理で行われます。

org.projectlombok:lombok依存関係 として pom.xml に追加すると、ビルド時にアノテーションが処理され、ソースには書かれていないメソッドがビルド後のクラスに生成されます。

アノテーション生成されるもの
@Getter / @Setter各フィールドの getter / setter
@RequiredArgsConstructorfinal フィールドを引数に取るコンストラクター
@AllArgsConstructor / @NoArgsConstructor全フィールド / 引数なしのコンストラクター
@Data@Getter@Setter@ToString@EqualsAndHashCode@RequiredArgsConstructor をまとめたもの
@Slf4jロガーの log フィールド

手書きした BookForm(データクラス)と BookController(コンストラクターインジェクション)の getter・setter やコンストラクターは、Lombok のアノテーションで生成できます。

リクエストパラメーターBookForm は、フィールドごとに getter・setter を書きました。

BookForm.java(手書き)
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(と toStringequals/hashCode)が生成され、フィールドの宣言だけが残ります。

BookForm.java(Lombok)
@Data
public class BookForm {
private String title;
private int price;
}

値を変えない不変のクラスには @Getter で getter だけを生成します。Java の record を使えば、Lombok なしでアクセサー・equals/hashCodetoString が生成されます。

2-2. コンストラクターインジェクション

Section titled “2-2. コンストラクターインジェクション”

サービスとリポジトリBookController は、注入する BookService を受け取るコンストラクターを書きました。

BookController.java(手書き)
@Controller
public class BookController {
private final BookService bookService;
public BookController(BookService bookService) {
this.bookService = bookService;
}
// books メソッドなど
}

@RequiredArgsConstructorfinal フィールドを引数に取るコンストラクターを生成するので、このコンストラクターを省けます。BookServiceBookRepository の注入も同じです。

BookController.java(Lombok)
@Controller
@RequiredArgsConstructor
public class BookController {
private final BookService bookService;
// books メソッドなど
}

final フィールドがあってコンストラクターが見当たらないクラスは、@RequiredArgsConstructor がコンストラクターを生成しています。