還在手寫 Getter/Setter 方法嗎?Lombok 讓你的代碼更簡潔!
以下是文章大綱:

Lombok 是什么?
官網(wǎng):https://projectlombok.org/
Lombok 是一個 Java 庫,使用 Lombok 可以通過簡單的注解幫助我們消除 Java 的樣板代碼,使代碼更加簡潔清晰。
比如對于簡單的 Java 對象(POJO),很多的代碼里充斥著大量的 getter() 和 setter() 方法,樣板代碼占用比例高,影響可讀性,引入 Lombok 只需一個注解就能達(dá)到相同效果,而且更簡潔。
Lombok 引入
1、POM 中引入依賴
使用 Lombok 注解需要依賴它的庫。
Maven 庫:https://mvnrepository.com/artifact/org.projectlombok/lombok
??org.projectlombok
??lombok
??1.18.16
系統(tǒng)中如果有引入無需重復(fù)引入。
2、IDE 中安裝插件
為什么裝插件?
因?yàn)?Lombok 的引入后,java 文件使用 javac 編譯成的字節(jié)碼文件中就會包含 getter 和 setter 函數(shù),但是源代碼中找不到定義,IDE 會認(rèn)為這是錯誤,因此需要安裝一個 Lombok 的插件,方便本地 IDE 的研發(fā)工作。
IDEA 中安裝:
Settings->Plugins->輸入框輸入”lombok”

Lombok 使用
比如要針對以下 Java 對象提供 getter() 和 setter() 方法:
public?class?Mountain?{
????private?String?name;
????private?String?country;
}
只需要在類上打 @Getter 和 @Setter 注解。
@Getter
@Setter
public?class?Mountain?{
????private?String?name;
????private?String?country;
}
然后用 maven 編譯一下:mvn clean compile。
使用的時候就可以正常拿到像 getCountry() 和 setCountry() 這樣的方法。通過 IDE 找方法調(diào)用處也可以直接鎖定到字段上,以前要點(diǎn)兩下才能看到字段明細(xì)信息,使用 Lombok 點(diǎn)一下就能達(dá)到效果。

Lombok 使用注意
不建議直接使用
@Data這種大而全的方式覆蓋太多的簡化場景。toString 場景不建議使用 Lombok 的,建議使用系統(tǒng)自定義 ToString 里的方法。
對外包考慮到接入方也需要引入依賴,如果擔(dān)心副作用,可以不引入。
其他注解酌情使用。
Lombok 原理
自 JDK6 之后,javac 在執(zhí)行的時候會調(diào)用實(shí)現(xiàn)了 JSR 269 API 的程序,這樣我們就可以對編譯器做一些增強(qiáng),這時 javac 執(zhí)行的過程如下:

Lombok 本質(zhì)上就是一個實(shí)現(xiàn)了“JSR 269 API”的程序。在使用 javac 的過程中,它產(chǎn)生作用的具體流程如下:
javac對源代碼進(jìn)行分析,生成一棵抽象語法樹(AST)運(yùn)行過程中調(diào)用實(shí)現(xiàn)了“
JSR 269 API”的Lombok程序Lombok 對第一步驟得到的 AST 進(jìn)行處理,找到
@Getter @Setter注解所在類對應(yīng)的語法樹(AST)Lombok 修改該語法樹(AST),增加
getter()和setter()方法定義的相應(yīng)樹節(jié)點(diǎn)javac 使用修改后的抽象語法樹(AST)生成字節(jié)碼文件,即給 class 增加新的節(jié)點(diǎn)(代碼塊)
有道無術(shù),術(shù)可成;有術(shù)無道,止于術(shù)
歡迎大家關(guān)注Java之道公眾號
好文章,我在看??
