recruit
—— 人力資源 ——
【ICT技術積累】Lombok全面詳細講解
發(fā)布時間:2020-07-27瀏覽次數:
如果你使用過Lombok你可能只使用了部分功能,那么這里列舉了所有功能,你繼續(xù)閱讀能完善這方面的知識;
如果你還沒用用過,甚至不知道這是什么,那么對不起,你已經被技術淘汰了,這里有一份詳盡的教程讓你一次性惡補過來;
簡介
Lombok是一個可以通過注解來幫助我們簡化消除一些必須有但顯得很臃腫的Java代碼的一種工具,通過使用對應的注解,可以在編譯源碼的時候動態(tài)添加源碼。
例如在實體中經常見到一堆Getter和Setter方法,這些方法是必要的不可缺少的,但是這些代碼感覺卻像是“垃圾”,看起來重復而臃腫,看起來也不美觀,也不簡潔清爽,可以使用lombok,在類上直接使用@Getter @Setter 這兩個注解,那么代碼在編譯的時候會自動幫你生成這個類下的所有字段對應的Getter和Setter方法,實體中只有一些屬性,看起來實體類變得簡潔很多,雖然IDE可以很快的生成出來,但是生成之后的實體還是那么的臃腫,而且如果修改了字段的名稱或者字段的類型還要重新生成,比較麻煩,使用Lombok就是消除一些含金量不高卻必須要有的代碼,使程序員看起來代碼更加簡潔、清爽。
Automatic Resource Management, automatic generation of getters, setters, equals, hashCode and toString, and more!
lombok的官方地址:https://projectlombok.org/
lombok的Github地址:https://github.com/rzwitserloot/lombokLombok
plugin 插件
Intellij idea 使用Lombok需要安裝插件:Lombok plugin: Preferences —> Plugins —> 搜索 Lombok plugin — > Install
同時設置 Preferences -> Compiler -> Annotation Processors -> Enable annotation processing勾選。

使用示例
首先引入lombok依賴

1. @Getter/@Setter
為字段生成Getter和Setter方法,可以注解到字段或者類上(注解在類上會為類中的所有字段生成Getter和Setter方法),默認是public類型的,如果需要的話可以修改方法的訪問級別。

結果解釋:
id字段生成了Getter&Setter,訪問修飾符是public
phone只生成了Getter方法,因為只使用了@Getter而沒有使用@Setter, 并且訪問修飾符是protected
password 上并沒有注解,所以什么都不生成
注意:Lombok中的注解一般都會包含一個無參構造函數注解@NoArgsConstructor(用于生成無參構造函數的) ,所以還會額外生成一個無參構造函數
@Getter @Setter 注解在類上,表示為類中的所有字段生成Getter&Setter方法。


2. @NonNull
為字段賦值時(即調用字段的setter方法時),如果傳的參數為null,則會拋出空異常NullPointerException,生成setter方法時會對參數是否為空檢查

3. @NoArgsConstructor
生成一個無參構造方法。當類中有final字段沒有被初始化時,編譯器會報錯,此時可用@NoArgsConstructor(force = true),然后就會為沒有初始化的final字段設置默認值 0 / false / null, 這樣編譯器就不會報錯。對于具有約束的字段(例如@NonNull字段),不會生成檢查或分配,因此請注意,正確初始化這些字段之前,這些約束無效。

4. @RequiredArgsConstructor
生成構造方法(可能帶參數也可能不帶參數),如果帶參數,這參數只能是以final修飾的未經初始化的字段,或者是以@NonNull注解的未經初始化的字段。
@RequiredArgsConstructor(staticName = “of”)會生成一個of()的靜態(tài)方法,并把構造方法設置為私有的

必要的構造函數只會生成final修飾的未經初始化的字段或者是以@NonNull注解的未經初始化的字段, 所以生成了public User(@NonNull String phone, Integer age)構造函數

5. @AllArgsConstructor
生成一個全參數的構造方法

6. @ToString
生成toString()方法,默認情況下它會按順序(以逗號分隔)打印你的類名稱以及每個字段??梢赃@樣設置不包含哪些字段,可以指定一個也可以指定多個@ToString(exclude = “id”) / @ToString(exclude = {“id”,“name”})
如果繼承的有父類的話,可以設置callSuper 讓其調用父類的toString()方法,例如:@ToString(callSuper = true)


7. @EqualsAndHashCode
生成hashCode()和equals()方法,默認情況下,它將使用所有非靜態(tài),非transient字段。但可以通過在可選的exclude參數中來排除更多字段?;蛘?,通過在of參數中命名它們來準確指定希望使用哪些字段。
// exclude 排除字段
@EqualsAndHashCode(exclude = {“password”, “salt”})
// of 指定要包含的字段
@EqualsAndHashCode(of = {“id”, “phone”, “password”})


8. @Data
@Data 包含了 @ToString、@EqualsAndHashCode、@Getter / @Setter和@RequiredArgsConstructor的功能

9. @Value
@Value 將字段都變成不可變類型:使用final修飾, 同時還包含@ToString、@EqualsAndHashCode、@AllArgsConstructor 、@Getter(注意只有Getter沒有Setter)


10. @Log
生成log對象,用于記錄日志,可以通過topic屬性來設置getLogger(String name)方法的參數 例如 @Log4j(topic = “com.xxx.entity.User”),默認是類的全限定名,即 類名.class,log支持以下幾種:
@Log java.util.logging.Logger
@Log4j org.apache.log4j.Logger
@Log4j2 org.apache.logging.log4j.Logger
@Slf4j org.slf4j.Logger
@XSlf4j org.slf4j.ext.XLogger
@CommonsLog org.apache.commons.logging.Log
@JBossLog org.jboss.logging.Logger


11. @SneakyThrows

12. @Synchronized
給方法加上同步鎖

13. @Cleanup
主要用來修飾 IO 流相關類, 會在 finally 代碼塊中對該資源進行 close();

14. @Getter(lazy = true)
@Getter(lazy = true)
標注字段為懶加載字段,懶加載字段在創(chuàng)建對象時不會進行初始化,而是在第一次訪問的時候才會初始化,后面再次訪問也不會重復初始化



15. @Wither
提供了給final字段賦值的一種方法

16. @Builder
@Builder注釋為你的類生成復雜的構建器API。

17. @Delegate
為List類型的字段生成一大堆常用的方法,其實這些方法都是List中的方法
注意:一個類中只能使用一個@Delegate注解,因為使用多個會生成多個size()方法,從而會編譯報錯。

lombok.config
lombok.config配置文件是通過一些設置來控制代碼生成的規(guī)則或者稱之為習慣,配置文件的位置應放在src/mian/java,不要放置在src/main/resources。
注意配置文件和要使用注解的類要在同一套代碼中,要么同時在src/main/java 要么同時在 src/test/java中
lombok.config


如果,你喜歡ICT行業(yè)技術,歡迎大咖來一起共事。
