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