1. 程式人生 > 其它 >SpringBoot - Lombok使用詳解1(基本介紹、安裝配置、var和val)

SpringBoot - Lombok使用詳解1(基本介紹、安裝配置、var和val)

我們建立 POJO 類時,經常需要先寫屬性,然後手寫或者自動生成 get 和 set 方法,然後還要重寫 toString 方法....一系列操作下來,這個 POJO 類便會產生太多的樣板式程式碼。 這種傳統的方式不僅使得程式碼十分臃腫,有時也不方便維護,比如:當變數名或者是修飾符改變了,我們就要刪除 set、get 方法重新生成。 而 Lombok 出現就是為了解決程式碼書寫的冗餘問題,下面對其進行詳細進行介紹。

一、基本介紹

1,Lombok 介紹

(1)Lombok 提供了簡單的註解的形式來幫助我們簡化消除一些必須有但顯得很臃腫的 java 程式碼。

比如:在一個 POJO 中,一個屬性的 getter 和 setter 可通過 @Getter 和 @Setter 註解來取代,程式碼編寫就更加簡潔和快速。   (2)而對應的註解最終會在編譯原始碼的時候生成對應的方法,所以不會影響任何執行效率。  

2,外掛安裝

(1)這裡以 Intellij IDE(Mac 版)為例,依次開啟 Preferences 視窗 -> Plugins -> Marketplace,搜尋 Lombok 外掛然後安裝。
(2)安裝後重啟 IDE。

3,新增依賴

(1)修改專案的 pom.xml 檔案,新增如下 maven 依賴:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
</dependency>


(2)修改 pom.xml 後 IDE 自帶的 maven 會自動下載 jar 包,並在下方顯示 jar 包下載進度,我們可以耐心等一會。

 

二、var 與 val

(1)val、val 關鍵字可以讓我們在定義一個變數時候不需要提前指定它的型別,它的實際的型別將由初始化的表示式推斷:
  • var 所宣告的變數是非 final 的。
  • val 所宣告的變數是 final 的。
var example = new ArrayList<String>();
example.add("welcome to hangge.com");
val foo = example.get(0);

(2)上面程式碼將會翻譯成如下 Java 程式:
ArrayList example = new ArrayList<String>();
example.add(
"welcome to hangge.com"); final String foo = example.get(0);

三、Lombok 註解概覽

Lombok 外掛主要為我們提供瞭如下註解,這裡對其做一個簡單的彙總。各個註解詳細的介紹以及用法,可以參考我後續的文章。
  • @Getter 註解在屬性(類)上,為屬性(所有非靜態成員變數)提供 get() 方法
  • @Setter 註解在屬性(類)上,為屬性(所有非靜態成員變數)提供 set() 方法
  • @ToString 該註解的作用是為類自動生成 toString() 方法
  • @EqualsAndHashCode 為物件欄位自動生成 hashCode() 和 equals() 實現
  • @AllArgsConstructor、@RequiredArgsConstructor、@NoArgsConstructor 顧名思義,為類自動生成對應引數的構造器
  • @Data 註解在類上,自動為所有欄位新增 @ToString、@EqualsAndHashCode、@Getter。為非 final 欄位新增 @Setter 和 @RequiredArgsConstructor。本質上相當於幾個註解的綜合效果
  • @Value 註解和 @Data 類似,區別在於它會把所有成員變數預設定義為 private final 修飾,並且不會生成 set() 方法
  • @Log、@Log4j、@Log4j2、@Slf4j、@XSlf4j、@CommonsLog、@JBossLog 註解在類上,自動為類新增對應的日誌支援
  • @NonNull 註解在方法引數上,用於自動生成空值引數檢查,自動幫助我們避免空指標
  • @Cleanup 自動幫我們呼叫 close() 方法,作用在區域性變數上,在作用域結束時會自動呼叫 close() 方法釋放資源,可以關閉流
  • @Builder 註解在類上,被註解的類加個構造者模式
  • @Synchronized 註解在類上,加個同步鎖
  • @SneakyThrows 等同於 try/catch 捕獲異常