其實之前受同事影響接觸過Lombok,當時對它的印象停留在了:怎麼侵入性怎麼強,那我什麼代碼都不用寫了,就光打註解了唄,以後還怎麼維護。但是看了人家一個個乾淨簡潔的entity,着實真香,所以決定接觸一下,並對其做一些取捨。
先接地氣的介紹一下Lombok的原理,Lombok的所有註解的生命週期都是SOURCE
@Retention 這個元註解表示該註解的生命週期,有三種類型。
關於SOURCE和CLASS的區別可以這麼理解,SOURCE生命週期的註解內容在.class文件中根本看不到,但是CLASS可以。
而javac編譯源文件的過程是這樣的:
Lombok其實就是當javac把源文件分析生成AST語法樹後,它去修改這個語法樹,要get/set方法是吧?要構造器是吧?好幫你在AST語法樹上直接加上,然後javac將修改後的語法樹編譯成.class文件,並且卸磨殺驢丟棄了Lombok,厲害了。
Lombok的優缺點得結合具體註解說,比如@NotNull判斷非空,@Data一鍋端,@Cleanup關閉資源,以及@UtilityClass直接把方法變成靜態的了直接把類變成工具類了,類似這些我有點不喜歡,會影響後續代碼維護,這些就是缺點。
當然有優點,叭啦這麼多接下來纔是重點,總結幾個比較喜歡的Lombok註解。
1.@Getter/@Setter 代替get/set方法
相當於
2.@Accessors有點厲害,可以鏈式set,它的chain屬性默認爲false,要設置爲true才能用,同時要配合@Setter,很好理解,再厲害也得給人家set方法纔行啊。
相當於
用的時候是這樣子的
3.@Builder一鍵變成構造者模式,這個最喜歡。
相當於
用的時候是這樣子的
4.@AllArgsConstructor 添加一個全參數構造器
相當於
5.NoArgsConstructor 添加一個無參構造器
相當於
用的時候可以組合起來靈活運用,比如這樣
這樣就是全參,有參和無參構造器都有了