Lombok 介绍
Lombok使用
介紹
在項目中使用Lombok可以減少很多重復(fù)代碼的書寫。比如說getter/setter/toString等方法的編寫。
IDEA中的安裝
打開IDEA的Setting –> 選擇Plugins選項 –> 選擇Browse repositories –> 搜索lombok –> 點擊安裝 –> 安裝完成重啟IDEA –> 安裝成功
引入依賴
在項目中添加Lombok依賴jar,在pom文件中添加如下部分。(不清楚版本可以在Maven倉庫中搜索)
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.18</version><scope>provided</scope> </dependency>?
使用
在對應(yīng)的類或者方法上使用對應(yīng)注解即可。例如:?
Lombok有哪些注解
- @Setter
- @Getter
- @Data
- @Log(這是一個泛型注解,具體有很多種形式)
- @AllArgsConstructor
- @NoArgsConstructor
- @EqualsAndHashCode
- @NonNull
- @Cleanup
- @ToString
- @RequiredArgsConstructor
- @Value
- @SneakyThrows
- @Synchronized
注解詳情
log
注解在?類?上。有如下可選擇可用:
//@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); //@Log private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName()); //@Log4j private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.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);@EqualsAndHashCode
該注解使用在類上,該注解在類級別注釋會同時生成equals和hashCode。?
注意繼承關(guān)系的時候該注解的使用。詳細介紹參照官方介紹?
存在繼承關(guān)系需要設(shè)置callSuper參數(shù)為true。
@Data
該注解使用在類上,該注解是最常用的注解,它結(jié)合了@ToString,@EqualsAndHashCode, @Getter和@Setter。本質(zhì)上使用@Data注解,類默認(rèn)@ToString和@EqualsAndHashCode以及每個字段都有@Setter和@getter。該注解也會生成一個公共構(gòu)造函數(shù),可以將任何@NonNull和final字段作為參數(shù)。
雖然@Data注解非常有用,但是它沒有與其他注解相同的控制粒度。@Data提供了一個可以生成靜態(tài)工廠的單一參數(shù),將staticConstructor參數(shù)設(shè)置為所需要的名稱,Lombok自動生成的構(gòu)造函數(shù)設(shè)置為私有,并提供公開的給定名稱的靜態(tài)工廠方法。?
@AllArgsConstructor
該注解使用在類上,該注解提供一個全參數(shù)的構(gòu)造方法,默認(rèn)不提供無參構(gòu)造。?
@NoArgsConstructor
該注解使用在類上,該注解提供一個無參構(gòu)造?
@RequiredArgsConstructor
該注解使用在類上,使用類中所有帶有 @NonNull 注解的或者帶有 final 修飾的成員變量生成對應(yīng)的構(gòu)造方法。?
@Value
這個注解用在 類 上,會生成含所有參數(shù)的構(gòu)造方法,get 方法,此外還提供了equals、hashCode、toString 方法。?
注意:沒有setter?
@Cleanup
該注解使用在屬性前,該注解是用來保證分配的資源被釋放。在本地變量上使用該注解,任何后續(xù)代碼都將封裝在try/finally中,確保當(dāng)前作用于中的資源被釋放。默認(rèn)@Cleanup清理的方法為close,可以使用value指定不同的方法名稱。?
@Synchronized
該注解使用在類或者實例方法上,Synchronized在一個方法上,使用關(guān)鍵字可能會導(dǎo)致結(jié)果和想要的結(jié)果不同,因為多線程情況下會出現(xiàn)異常情況。Synchronized?
關(guān)鍵字將在this示例方法情況下鎖定當(dāng)前對象,或者class講臺方法的對象上多鎖定。這可能會導(dǎo)致死鎖現(xiàn)象。一般情況下建議鎖定一個專門用于此目的的獨立鎖,而不是允許公共對象進行鎖定。該注解也是為了達到該目的。?
@SneakyThrows
該注解使用在方法上,這個注解用在 方法 上,可以將方法中的代碼用 try-catch 語句包裹起來,捕獲異常并在 catch 中用 Lombok.sneakyThrow(e) 把異常拋出,可以使用 @SneakyThrows(Exception.class) 的形式指定拋出哪種異常。該注解需要謹(jǐn)慎使用。詳情參看官方介紹?
結(jié)語
Lombok的目的是減少代碼的重復(fù)編寫,并提供比較好的解決方案。當(dāng)然也存在一些爭議性的注解,可以根據(jù)實際場景進項使用。Lombok有一些實驗注解可以在官網(wǎng)查看。
Lombok使用介紹在項目中使用Lombok可以減少很多重復(fù)代碼的書寫。比如說getter/setter/toString等方法的編寫。
IDEA中的安裝打開IDEA的Setting –> 選擇Plugins選項 –> 選擇Browse repositories –> 搜索lombok –> 點擊安裝 –> 安裝完成重啟IDEA –> 安裝成功
引入依賴在項目中添加Lombok依賴jar,在pom文件中添加如下部分。(不清楚版本可以在Maven倉庫中搜索)
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency>? ? <groupId>org.projectlombok</groupId>? ? <artifactId>lombok</artifactId>? ? <version>1.16.18</version>? ? <scope>provided</scope></dependency>12345678使用在對應(yīng)的類或者方法上使用對應(yīng)注解即可。例如:?
Lombok有哪些注解@Setter@Getter@Data@Log(這是一個泛型注解,具體有很多種形式)@AllArgsConstructor@NoArgsConstructor@EqualsAndHashCode@NonNull@Cleanup@ToString@RequiredArgsConstructor@Value@SneakyThrows@Synchronized注解詳情log注解在 類 上。有如下可選擇可用:
//@CommonsLogprivate static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);//@JBossLogprivate static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);//@Logprivate static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());//@Log4jprivate static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);//@Log4j2private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);//@Slf4jprivate static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);//@XSlf4jprivate static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);1234567891011121314默認(rèn)情況下,記錄器的主題(或名稱)將是使用注釋進行@Log注釋的類的類名稱。這可以通過指定topic參數(shù)來定制。例如:@XSlf4j(topic="reporting")。
該類型注解可以滿足不同的日志系統(tǒng)的日志使用,Lombok提供了一些自定義配置項可以參看官方說明文檔。
Log官方介紹
@Getter和@Setter該注解使用在類或者屬性上,該注解可以使用在類上也可以使用在屬性上。生成的getter遵循布爾屬性的約定。例如:boolean類型的sex,getter方法為isSex而不是getSex
在使用該注解時,會默認(rèn)生成一個無參構(gòu)造。和對應(yīng)的getterhe setter方法?
該注解也可以使用在單個屬性上,會默認(rèn)生成一個無參構(gòu)造:?
@Data該注解使用在類上,該注解會提供getter、setter、equals、canEqual、hashCode、toString方法。
@NonNull該注解使用在屬性上,該注解用于屬的非空檢查,當(dāng)放在setter方法的字段上,將生成一個空檢查,如果為空,則拋出NullPointerException。?該注解會默認(rèn)是生成一個無參構(gòu)造。?
@toString該注解使用在類上,該注解默認(rèn)生成任何非講臺字段以名稱-值的形式輸出。?1、如果需要可以通過注釋參數(shù)includeFieldNames來控制輸出中是否包含的屬性名稱。?2、可以通過exclude參數(shù)中包含字段名稱,可以從生成的方法中排除特定字段。?3、可以通過callSuper參數(shù)控制父類的輸出。
includeFieldNames是否包含屬性名稱:?
exclude 排除指定字段?
callSuper輸出父類屬性?
注意:父類也要有toString方法,不然打印的是對象內(nèi)存地址
//父類無toString方法Person(super=com.motui.Person@3abfe836, firstName=motui, address=北京, dateOfBirth=Tue Jan 09 11:49:05 CST 2018, sex=true)//父類有toString方法Person(super=People(id=111), firstName=motui, address=北京, dateOfBirth=Tue Jan 09 11:50:11 CST 2018, sex=true)1234@EqualsAndHashCode該注解使用在類上,該注解在類級別注釋會同時生成equals和hashCode。?注意繼承關(guān)系的時候該注解的使用。詳細介紹參照官方介紹?
存在繼承關(guān)系需要設(shè)置callSuper參數(shù)為true。
@Data該注解使用在類上,該注解是最常用的注解,它結(jié)合了@ToString,@EqualsAndHashCode, @Getter和@Setter。本質(zhì)上使用@Data注解,類默認(rèn)@ToString和@EqualsAndHashCode以及每個字段都有@Setter和@getter。該注解也會生成一個公共構(gòu)造函數(shù),可以將任何@NonNull和final字段作為參數(shù)。
雖然@Data注解非常有用,但是它沒有與其他注解相同的控制粒度。@Data提供了一個可以生成靜態(tài)工廠的單一參數(shù),將staticConstructor參數(shù)設(shè)置為所需要的名稱,Lombok自動生成的構(gòu)造函數(shù)設(shè)置為私有,并提供公開的給定名稱的靜態(tài)工廠方法。?
@AllArgsConstructor該注解使用在類上,該注解提供一個全參數(shù)的構(gòu)造方法,默認(rèn)不提供無參構(gòu)造。?
@NoArgsConstructor該注解使用在類上,該注解提供一個無參構(gòu)造?
@RequiredArgsConstructor該注解使用在類上,使用類中所有帶有 @NonNull 注解的或者帶有 final 修飾的成員變量生成對應(yīng)的構(gòu)造方法。?
@Value這個注解用在 類 上,會生成含所有參數(shù)的構(gòu)造方法,get 方法,此外還提供了equals、hashCode、toString 方法。?注意:沒有setter?
@Cleanup該注解使用在屬性前,該注解是用來保證分配的資源被釋放。在本地變量上使用該注解,任何后續(xù)代碼都將封裝在try/finally中,確保當(dāng)前作用于中的資源被釋放。默認(rèn)@Cleanup清理的方法為close,可以使用value指定不同的方法名稱。?
@Synchronized該注解使用在類或者實例方法上,Synchronized在一個方法上,使用關(guān)鍵字可能會導(dǎo)致結(jié)果和想要的結(jié)果不同,因為多線程情況下會出現(xiàn)異常情況。Synchronized?關(guān)鍵字將在this示例方法情況下鎖定當(dāng)前對象,或者class講臺方法的對象上多鎖定。這可能會導(dǎo)致死鎖現(xiàn)象。一般情況下建議鎖定一個專門用于此目的的獨立鎖,而不是允許公共對象進行鎖定。該注解也是為了達到該目的。?
@SneakyThrows該注解使用在方法上,這個注解用在 方法 上,可以將方法中的代碼用 try-catch 語句包裹起來,捕獲異常并在 catch 中用 Lombok.sneakyThrow(e) 把異常拋出,可以使用 @SneakyThrows(Exception.class) 的形式指定拋出哪種異常。該注解需要謹(jǐn)慎使用。詳情參看官方介紹?
結(jié)語Lombok的目的是減少代碼的重復(fù)編寫,并提供比較好的解決方案。當(dāng)然也存在一些爭議性的注解,可以根據(jù)實際場景進項使用。Lombok有一些實驗注解可以在官網(wǎng)查看。---------------------?作者:motui?來源:CSDN?原文:https://blog.csdn.net/motui/article/details/79012846?版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!
轉(zhuǎn)載于:https://www.cnblogs.com/Chary/p/9815298.html
總結(jié)
- 上一篇: Box-Cox变换
- 下一篇: [CSS3]环形进度条