什麼是Lombok
Lombok是一個Java庫,能自動插入編輯器並構建工具,簡化Java開發。
官網: https://www.projectlombok.org/
Lombok的作用
透過 新增註解 的方式,Lombok能以簡單的註解形式來簡化java程式碼,提高開發人員的開發效率。
例如開發中經常需要寫的javabean,都需要花時間去新增相應的getter/setter,也許還要去寫構造器、equals等方法,而且需要維護,當屬性多時會出現大量的getter/setter方法,這些顯得很冗長也沒有太多技術含量,一旦修改屬性,就容易出現忘記修改對應方法的失誤,使程式碼看起來更簡潔些。
Lombok的配置
使用Lombok 有兩個工作要做:
-
安裝idea的外掛
-
在專案裡面新增 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。設定完成之後程式正常執行。
總結
-
Lombok: 就是一個工具, 簡化java程式碼開發
-
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方法的麻煩,但大大降低了原始碼的可讀性和完整性,降低了閱讀程式碼的舒適度