spring.svg

【Spring Boot】Lombokの導入

SpringBoot

Lombok とは

Lombok は、アノテーションによってセッターやゲッター、コンストラクターなどのクラスの機能を自動生成するためのライブラリです。

導入

インストール

以下の URL から「lombok.jar」をダウンロードします。

https://projectlombok.org/download

「lombok.jar」を起動し、IDEs に「SpringToolSuite4.exe」を選択して「Install/Update」を実行します。

プロジェクトへの追加

Spring Boot のプロジェクトに Lombok を導入します。

Gradle
annotationProcessor 'org.projectlombok:lombok'

Lombok の基礎

@NoArgsConstructor

クラスに付与することで、引数なしコンストラクターを自動生成します。

@NoArgsConstructor
public class SampleData {
  //以下が自動生成される
  //実際以下の記述は不要
  public SampleData() {
  }
}

@AllArgsConstructor

クラスに付与することで、すべてのフィールドを引数としたコンストラクターを自動生成します。

@AllArgsConstructor
public class SampleData {
  private String id;
  private String firstName;
  private String lastName;
  private int age;

  //以下が自動生成される
  //実際以下の記述は不要
  public SampleData(String id, String firstName, String lastName, int age) {
    this.id = id;
    this.firstName = firstName;
    this.lastName = lastName;
    this.age = age;
  }
}

@RequiredArgsConstructor

クラスに付与することで、final修飾子のフィールドを引数としたコンストラクターを自動生成します。

@RequiredArgsConstructor
public class SampleData {
  private final String id;
  private String firstName;
  private String lastName;
  private int age;

  //以下が自動生成される
  //実際以下の記述は不要
  public SampleData(final String id) {
    this.id = id;
  }
}

@Getter, @Setter

@Getter@Setterは、付与したフィールドのゲッターとセッターを自動生成します。

public class SampleData {
  @Getter
  @Setter
  private String id;

  //以下が自動生成される
  //実際以下の記述は不要
  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }
}

クラスに付与することで、すべてのフィールドのゲッター、セッターが自動生成されます。

@Getter
@Setter
public class SampleData {
  //すべてのフィールドのゲッター、セッターが生成される
  private String id;
  private String firstName;
  private String lastName;
  private int age;
}

@ToString

クラスに付与することで、フィールド情報を返すtoStringメソッドを生成(オーバーライド)します。

@AllArgsConstructor
@Getter
@ToString
public class SampleData {
  private String id;
  private String firstName;
  private String lastName;
  private int age;
}
実行例
SampleData sampleData = new SampleData("000001", "taro", "yamada", 20);
System.out.println(sampleData.toString());
//出力結果
//SampleData(id=000001, firstName=taro, lastName=yamada, age=20)

@EqualsAndHashCode

クラスに付与することで、equalshashCodeメソッドを生成(オーバーライド)します。

equalsは、すべてのフィールドが等しい場合にtrueを返すように実装されます。 非プリミティブなフィールドについては、そのインスタンスのequalsによって判断されます。

hashCodeは、フィールドの値を基に生成されます。 つまり、すべてのフィールドの値が等しい場合、hashCodeの値も等しくなります。 ただし、非プリミティブ名フィールドについては、そのインスタンスのhashCodeが使用されます。

@EqualsAndHashCode
@AllArgsConstructor
public class SampleData {
  private String id;
  private String firstName;
  private String lastName;
  private int age;
}
実行例
SampleData data1 = new SampleData("000001", "taro", "yamada", 20);
SampleData data2 = new SampleData("000001", "taro", "yamada", 20);
SampleData data3 = new SampleData("000001", "taro", "yamada", 30);

data1.equals(data2);  //true
data1.equals(data3);  //false

@Data

@RequiredArgsConstructor@Getter@Setter@ToString@EqualsAndHashCodeをまとめて宣言したい場合に使用します。

以下 2 つのコードは同じものになります。

@Dataによる宣言
@Data
public class SampleData {
  private String id;
  private String firstName;
  private String lastName;
  private int age;
}
@Dataを使用しない場合の宣言
@RequiredArgsConstructor
@Getter
@Setter
@ToString
@EqualsAndHashCode
public class SampleData {
  private String id;
  private String firstName;
  private String lastName;
  private int age;
}

@Builder

@Builderを付与することで、デザインパターンの 1 つである Builder パターンが生成されます。 Builder パターンについては、以下を参照してください。

7.Builder パターン | TECHSCORE

@Builder
@AllArgsConstructor
public class SampleData {
  private String id;
  private String firstName;
  private String lastName;
  private int age;
}
使用例
SampleData data1 = new SampleData("000001", "taro", "yamada", 20);
SampleData data2 = data1.builder()
                        .id("000002")
                        .build();

上記の使用例だと、data1を基にid"000002"に変更したオブジェクトdata2を生成しています。

このように基となるオブジェクトから、一部の情報を変更したオブジェクトを生成するのに役立ちます。 個人的には、テストコードを書く際に重宝しています。