Lombok介紹
介紹
在專案中使用Lombok可以減少很多重複程式碼的書寫。比如說getter/setter/toString等方法的編寫。
IDEA中的安裝
開啟IDEA的Setting –> 選擇Plugins選項 –> 選擇Browse repositories –> 搜尋lombok –> 點選安裝 –> 安裝完成重啟IDEA –> 安裝成功
引入依賴
在專案中新增Lombok依賴jar,在pom檔案中新增如下部分。(不清楚版本可以在Maven倉庫中搜索)
使用
在對應的類或者方法上使用對應註解即可。例如:
Lombok有哪些註解
- @Setter
- @Getter
- @Data
- @Log(這是一個泛型註解,具體有很多種形式)
- @AllArgsConstructor
- @NoArgsConstructor
- @EqualsAndHashCode
- @NonNull
- @Cleanup
- @ToString
- @RequiredArgsConstructor
- @Value
- @SneakyThrows
- @Synchronized
註解詳情
log
註解在 類 上。有如下可選擇可用:
預設情況下,記錄器的主題(或名稱)將是使用註釋進行@Log
註釋的類的類名稱。這可以通過指定topic
引數來定製。例如:@XSlf4j(topic="reporting")
。
該型別註解可以滿足不同的日誌系統的日誌使用,Lombok提供了一些自定義配置項可以參看官方說明文件。
@Getter和@Setter
該註解使用在類或者屬性上,該註解可以使用在類上也可以使用在屬性上。生成的getter遵循布林屬性的約定。例如:boolean型別的sex,getter方法為isSex
而不是getSex
在使用該註解時,會預設生成一個無參構造。和對應的getterhe setter方法
該註解也可以使用在單個屬性上,會預設生成一個無參構造:
@Data
該註解使用在類上,該註解會提供getter、setter、equals、canEqual、hashCode、toString方法。
@NonNull
該註解使用在屬性上,該註解用於屬的非空檢查,當放在setter方法的欄位上,將生成一個空檢查,如果為空,則丟擲NullPointerException
@toString
該註解使用在類上,該註解預設生成任何非講臺欄位以名稱-值的形式輸出。
1、如果需要可以通過註釋引數includeFieldNames
來控制輸出中是否包含的屬性名稱。
2、可以通過exclude
引數中包含欄位名稱,可以從生成的方法中排除特定欄位。
3、可以通過callSuper
引數控制父類的輸出。
- includeFieldNames是否包含屬性名稱:
- exclude 排除指定欄位
- callSuper輸出父類屬性
注意:父類也要有toString方法,不然列印的是物件記憶體地址
//父類無toString方法
Person(super=com.motui.Person@3abfe836, firstName=motui, address=北京, dateOfBirth=Tue Jan 09 11:49:05 CST 2018, sex=true)
//父類有toString方法
Person(super=People(id=111), firstName=motui, address=北京, dateOfBirth=Tue Jan 09 11:50:11 CST 2018, sex=true)
- 1
- 2
- 3
- 4
@EqualsAndHashCode
該註解使用在類上,該註解在類級別註釋會同時生成equals
和hashCode
。
注意繼承關係的時候該註解的使用。詳細介紹參照官方介紹
存在繼承關係需要設定callSuper
引數為true
。
@Data
該註解使用在類上,該註解是最常用的註解,它結合了@ToString,@EqualsAndHashCode, @Getter和@Setter。本質上使用@Data
註解,類預設@ToString
和@EqualsAndHashCode
以及每個欄位都有@Setter
和@getter
。該註解也會生成一個公共建構函式,可以將任何@NonNull
和final
欄位作為引數。
雖然@Data
註解非常有用,但是它沒有與其他註解相同的控制粒度。@Data
提供了一個可以生成靜態工廠的單一引數,將staticConstructor
引數設定為所需要的名稱,Lombok自動生成的建構函式設定為私有,並提供公開的給定名稱的靜態工廠方法。
@AllArgsConstructor
該註解使用在類上,該註解提供一個全引數的構造方法,預設不提供無參構造。
@NoArgsConstructor
該註解使用在類上,該註解提供一個無參構造
@RequiredArgsConstructor
該註解使用在類上,使用類中所有帶有 @NonNull 註解的或者帶有 final 修飾的成員變數生成對應的構造方法。
@Value
這個註解用在 類 上,會生成含所有引數的構造方法,get 方法,此外還提供了equals、hashCode、toString 方法。 注意:沒有setter
@Cleanup
該註解使用在屬性前,該註解是用來保證分配的資源被釋放。在本地變數上使用該註解,任何後續程式碼都將封裝在try/finally中,確保當前作用於中的資源被釋放。預設@Cleanup
清理的方法為close
,可以使用value指定不同的方法名稱。
@Synchronized
該註解使用在類或者例項方法上,Synchronized在一個方法上,使用關鍵字可能會導致結果和想要的結果不同,因為多執行緒情況下會出現異常情況。Synchronized 關鍵字將在this示例方法情況下鎖定當前物件,或者class講臺方法的物件上多鎖定。這可能會導致死鎖現象。一般情況下建議鎖定一個專門用於此目的的獨立鎖,而不是允許公共物件進行鎖定。該註解也是為了達到該目的。
@SneakyThrows
該註解使用在方法上,這個註解用在 方法 上,可以將方法中的程式碼用 try-catch 語句包裹起來,捕獲異常並在 catch 中用 Lombok.sneakyThrow(e) 把異常丟擲,可以使用 @SneakyThrows(Exception.class) 的形式指定丟擲哪種異常。該註解需要謹慎使用。詳情參看官方介紹
結語
Lombok的目的是減少程式碼的重複編寫,並提供比較好的解決方案。當然也存在一些爭議性的註解,可以根據實際場景進項使用。Lombok有一些實驗註解可以在官網檢視。