我們創建 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)var、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 捕獲異常