【Spring Boot】Lombokの導入
Lombok とは
Lombok は、アノテーションによってセッターやゲッター、コンストラクターなどのクラスの機能を自動生成するためのライブラリです。
導入
インストール
以下の URL から「lombok.jar」をダウンロードします。
https://projectlombok.org/download
「lombok.jar」を起動し、IDEs に「SpringToolSuite4.exe」を選択して「Install/Update」を実行します。
プロジェクトへの追加
Spring Boot のプロジェクトに Lombok を導入します。
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
クラスに付与することで、equalsとhashCodeメソッドを生成(オーバーライド)します。
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
public class SampleData {
private String id;
private String firstName;
private String lastName;
private int age;
}@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 パターンについては、以下を参照してください。
@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を生成しています。
このように基となるオブジェクトから、一部の情報を変更したオブジェクトを生成するのに役立ちます。 個人的には、テストコードを書く際に重宝しています。