1. 程式人生 > >Java編碼輔助工具:Lombok —— 避免重復臃腫的代碼,提高效率

Java編碼輔助工具:Lombok —— 避免重復臃腫的代碼,提高效率

actor tin protect oge details err con bsp transient

在項目開發過程中,經常會涉及到一些調整很少但又必不可少的環節,比如實體類的Getter/Setter方法,ToString方法等。這時可以使用Lombok來避免這種重復的操作,減少非核心代碼的臃腫,提高編碼效率。

如何在IntelliJ IDEA中引入Lombok

  1. 安裝Lombok 插件(否則在調用setter/getter方法時IDE會提示報錯): File -> Settings -> Plugins 搜索Lombok Plugin完成安裝。
  2. pom.xml中引入lombok依賴(其中<scope>provided</scope>表示只在編譯、測試階段依賴該jar,運行階段不依賴(如運行容器中已包含了該jar,則置為provided避免jar沖突),默認<scope>compile</scope>則表示在編譯、測試、運行階段都依賴
    ):
 <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.20</version>
        <scope>provided</scope>
</dependency>

  

Lombok註解用途 (參考:https://blog.csdn.net/vbirdbest/article/details/79495398)

@Getter/@Setter

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

Lombok中的註解一般都會包含一個無參構造函數註解@NoArgsConstructor(用於生成無參構造函數) ,所以還會額外生成一個無參構造函數

@NonNull

調用字段的setter方法時,如果傳的參數為null,則會拋出空異常NullPointerException,生成setter方法時會檢查參數是否為空

@NoArgsConstructor

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

@RequiredArgsConstructor

生成構造方法(可能帶參數也可能不帶參數),如果帶參數,這參數只能是以final修飾的未經初始化的字段,或者是以@NonNull註解的未經初始化的字段。

@RequiredArgsConstructor(staticName = “of”)會生成一個of()的靜態方法,並把構造方法設置為私有的

@AllArgsConstructor

生成一個全參數的構造方法

@ToString

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

@EqualsAndHashCode

生成hashCode()和equals()方法,默認情況下,它將使用所有非靜態,非transient字段。但可以通過在可選的exclude參數中來排除更多字段。或者,通過在of參數中命名它們來準確指定希望使用哪些字段。

// exclude 排除字段
@EqualsAndHashCode(exclude = {“password”, “salt”})

// of 指定要包含的字段
@EqualsAndHashCode(of = {“id”, “phone”, “password”})

@Data

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

@Value

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

@Log

生成log對象,用於記錄日誌,可以通過topic屬性來設置getLogger(String name)方法的參數 例如 @Log4j(topic = “com.xxx.service.xxx”),默認是類的全限定名,即 類名.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

@Log
    private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4j
    private static final Logger log = org.apache.log4j.Logger.Logger.getLogger(UserService.class);
@Log4j2
    private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
@Slf4j
    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
@XSlf4j
    private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);
@CommonsLog
    private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
@JBossLog
    private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);

@SneakyThrows

使用try catch 修飾方法,來捕獲異常, 默認捕獲的是Throwable異常,也可以設置要捕獲的異常:@SneakyThrows(InterruptedException.class)

@Synchronized

給方法加上同步鎖

@Cleanup

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

@Getter(lazy = true)

標註字段為懶加載字段,懶加載字段在創建對象時不會進行初始化,而是在第一次訪問的時候才會初始化,後面再次訪問也不會重復初始化

@Wither

提供了給final字段賦值的一種方法

@Builder

為你的類生成復雜的構建器API。

@Delegate

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

Java編碼輔助工具:Lombok —— 避免重復臃腫的代碼,提高效率