Lombok介紹和設定

2022-12-25 18:00:14


什麼是Lombok

Lombok是一個Java庫,能自動插入編輯器並構建工具,簡化Java開發。

官網: https://www.projectlombok.org/



Lombok的作用

通過 新增註解 的方式,Lombok能以簡單的註解形式來簡化java程式碼,提高開發人員的開發效率。

例如開發中經常需要寫的javabean,都需要花時間去新增相應的getter/setter,也許還要去寫構造器、equals等方法,而且需要維護,當屬性多時會出現大量的getter/setter方法,這些顯得很冗長也沒有太多技術含量,一旦修改屬性,就容易出現忘記修改對應方法的失誤,使程式碼看起來更簡潔些。



Lombok的設定

使用Lombok 有兩個工作要做:

  1. 安裝idea的外掛

  2. 在專案裡面新增 lombok的依賴。


新增maven依賴


<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>1.18.8</version>
	<scope>provided</scope>
</dependency>

安裝外掛

使用Lombok還需要外掛的配合,使用開發工具為idea. 開啟idea的設定,點選Plugins,點選Browse repositories,在彈出的視窗中搜尋lombok,然後安裝即可



解決編譯時出錯問題

編譯時出錯,可能是沒有enable註解處理器。Annotation Processors > Enable annotation processing。設定完成之後程式正常執行。



總結

  1. Lombok: 就是一個工具, 簡化java程式碼開發

  2. Lombok環境

    • 新增座標

    • 新增外掛



Lombok的常用註解

  • @Data
  • @Getter/@Setter
  • @ToString
  • @NoArgsConstructor、@AllArgsConstructor

@Data:@Data註解在類上,會為類的所有屬性自動生成setter/getter、equals、canEqual、hashCode、toString方法,如為final屬性,則不會為該屬性生成setter方法。


@Data
public class User implements Serializable{
	private Integer id;
	private String username;
	private String password;
	private String address;
	private String nickname;
	private String gender;
	private String email;
	private String status;
}

@Getter/@Setter:如果覺得@Data太過殘暴不夠精細,可以使用@Getter/@Setter註解,此註解在屬性上,可以為相應的屬性自動生成Getter/Setter方法.


public class User implements Serializable{
	@Setter
	@Getter
	private Integer id;
	private String username;
	private String password;
	private String address;
	private String nickname;
	private String gender;
	private String email;
	private String status;
}


@ToString:類使用@ToString註解,Lombok會生成一個toString()方法,預設情況下,會輸出類名、所有屬性(會按照屬性定義順序),用逗號來分割。 通過exclude屬性指定忽略欄位不輸出,


@ToString(exclude = {"id"})
public class User implements Serializable{
	private Integer id;
	private String username;
	private String password;
	private String address;
	private String nickname;
	private String gender;
	private String email;
	private String status;
}

@xxxConstructor

@NoArgsConstructor: 無參構造器


@NoArgsConstructor
public class User implements Serializable{
	private Integer id;
	private String username;
	private String password;
	private String address;
	private String nickname;
	private String gender;
	private String email;
	private String status;
}

@AllArgsConstructor: 全參構造器


@AllArgsConstructor
public class User implements Serializable{
	private Integer id;
	private String username;
	private String password;
	private String address;
	private String nickname;
	private String gender;
	private String email;
	private String status;
}


**總結**
  • @Data:用在類上面的 , 生成set,get, toString, hashCode,canEqual、equals方法

  • @Getter:用在欄位, 生成get方法

  • @Setter:用在欄位, 生成set方法

  • @ToString:用在類上面的 生成toString方法

  • @xxxConstructor:用在類上面的 生成構造方法 (只能生成無參和全參的構造方法)

優點:

  • 能通過註解的形式自動生成構造器、getter/setter、equals、hashcode、toString等方法,提高了一定的開發效率

  • 讓程式碼變得簡潔,不用過多的去關注相應的方法

  • 屬性做修改時,也簡化了維護為這些屬性所生成的getter/setter方法等

缺點:

  • 不支援多種引數構造器的過載 , 要不就是無參,要不就是全參 , 如果希望做成只有一個引數、或者幾個引數的建構函式,需要自己手動新增。

  • 雖然省去了手動建立getter/setter方法的麻煩,但大大降低了原始碼的可讀性和完整性,降低了閱讀程式碼的舒適度