如何使用Lombok來優(yōu)雅的編碼

前言


Lombok 是一種 Java? 實用工具,可用來幫助開發(fā)人員消除 Java 的冗長,尤其是對于簡單的 Java 對象(POJO)。它通過注解實現(xiàn)這一目的。

安裝Lombok


打開 IDEA 的 Settings 面板,并選擇 Plugins 選項,然后點擊 “Browse repositories”

在輸入框輸入”lombok”,得到搜索結(jié)果,點擊安裝,然后安裝提示重啟 IDEA,安裝成功;


image.png

引入依賴

在自己的項目里添加 lombok 的編譯支持,在 pom 文件里面添加 dependency

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.18</version>
    <scope>provided</scope>
</dependency>

注解簡述

  • @Data = get + set + equal + canEqual + hashCode + toString
  • @Setter
  • @Getter
  • @Slf4j 注解在 類 上;為類提供一個 屬性名為 log 的日志對象,提供默認構(gòu)造方法。
  • @AllArgsConstructor 注解在 類 上;為類提供一個全參的構(gòu)造方法
  • @NoArgsConstructor 注解在 類 上;為類提供一個無參的構(gòu)造方法。
  • @EqualsAndHashCode 注解在 類 上, 可以生成 equals、canEqual、hashCode 方法。
  • @NonNull 注解在 屬性 上,會自動產(chǎn)生一個關(guān)于此參數(shù)的非空檢查,如果參數(shù)為空,則拋出一個空指針異常
  • @Cleanup 這個注解用在 變量 前面,可以保證此變量代表的資源會被自動關(guān)閉
  • @ToString 這個注解用在 類 上,可以生成所有參數(shù)的 toString 方法,還會生成默認的構(gòu)造方法
  • @RequiredArgsConstructor 這個注解用在 類 上,使用類中所有帶有 @NonNull 注解的或者帶有 final 修飾的成員變量生成對應的構(gòu)造方法。
  • @Value 這個注解用在 類 上,會生成含所有參數(shù)的構(gòu)造方法,get 方法,此外還提供了equals、hashCode、toString 方法。
  • @SneakyThrows 這個注解用在 方法 上,可以將方法中的代碼用 try-catch 語句包裹起來,捕獲異常并在 catch 中用 Lombok.sneakyThrow(e) 把異常拋出,可以使用 @SneakyThrows(Exception.class) 的形式指定拋出哪種異常
  • @Synchronized 這個注解用在 類方法 或者 實例方法 上,效果和 synchronized 關(guān)鍵字相同

注解詳解

@Data

注解在 上;提供類所有屬性的 get 和 set 方法,此外還提供了equals、canEqual、hashCode、toString 方法。

mark

@Setter

注解在 屬性 上;為單個屬性提供 set 方法; 注解在 上,為該類所有的屬性提供 set 方法, 都提供默認構(gòu)造方法。

mark
mark

@Getter

注解在 屬性 上;為單個屬性提供 get 方法; 注解在 上,為該類所有的屬性提供 get 方法,都提供默認構(gòu)造方法。

mark
mark

@Slf4j

注解在 上;為類提供一個 屬性名為 log 的日志對象,提供默認構(gòu)造方法。

//類上面注解了,直接調(diào)用 log 即可:
log.info(xxxx);

@AllArgsConstructor

注解在 上;為類提供一個全參的構(gòu)造方法,加了這個注解后,類中不提供默認構(gòu)造方法了。

mark

@NoArgsConstructor

注解在 上;為類提供一個無參的構(gòu)造方法。

mark

@EqualsAndHashCode

注解在 上, 可以生成 equals、canEqual、hashCode 方法。

mark

@NonNull

注解在 屬性 上,會自動產(chǎn)生一個關(guān)于此參數(shù)的非空檢查,如果參數(shù)為空,則拋出一個空指針異常,也會有一個默認的無參構(gòu)造方法。

mark

@Cleanup

這個注解用在 變量 前面,可以保證此變量代表的資源會被自動關(guān)閉,默認是調(diào)用資源的 close() 方法,如果該資源有其它關(guān)閉方法,可使用 @Cleanup(“methodName”) 來指定要調(diào)用的方法,也會生成默認的構(gòu)造方法

mark

@ToString

這個注解用在 上,可以生成所有參數(shù)的 toString 方法,還會生成默認的構(gòu)造方法。

mark

@RequiredArgsConstructor

它們都有三個參數(shù)可以設置

1、String staticName() default "";

如果設置了它,將原來的構(gòu)造方法的訪問修飾符將會變成 私有的,而外添加一個靜態(tài)構(gòu)造方法,參數(shù)相同,名字是設置的字符串的名字,訪問修飾符為公有的。

2、AnyAnnotation[] onConstructor() default {};
在構(gòu)造方法上添加注解。使用方法@RequiredArgsConstructor(onConstructor=@__({@AnnotationsGoHere}))}

例如我們在 Spring 項目中需要注入多個值,寫很多個 @Autowired 很麻煩,就可以使用這種方式:

@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class UserServiceImpl implements IUserService {
    private final IUserRepository userRepository;
    private final IOrderRepository orderRepository;
    ………………

3、AccessLevel access() default lombok.AccessLevel.PUBLIC;
構(gòu)造函數(shù)訪問修飾符;

@Value

這個注解用在 上,會生成含所有參數(shù)的構(gòu)造方法,get 方法,此外還提供了equals、hashCode、toString 方法。

mark

@SneakyThrows

這個注解用在 方法 上,可以將方法中的代碼用 try-catch 語句包裹起來,捕獲異常并在 catch 中用 Lombok.sneakyThrow(e) 把異常拋出,可以使用 @SneakyThrows(Exception.class) 的形式指定拋出哪種異常,也會生成默認的構(gòu)造方法。

mark

@Synchronized

這個注解用在 類方法 或者 實例方法 上,效果和 synchronized 關(guān)鍵字相同,區(qū)別在于鎖對象不同,對于類方法和實例方法,synchronized 關(guān)鍵字的鎖對象分別是類的 class 對象和 this 對象,而 @Synchronized 的鎖對象分別是 私有靜態(tài) final 對象 lock 和 私有 final 對象 lock,當然,也可以自己指定鎖對象,此外也提供默認的構(gòu)造方法。

mark

總結(jié)

本文主要站在巨人的肩上,文章內(nèi)容來源一下三篇文章。本文主要提取了三篇文章中的優(yōu)點整合而成。


文章參考:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • 在面向?qū)ο缶幊讨斜夭豢缮傩枰诖a中定義對象模型,而在基于Java的業(yè)務平臺開發(fā)實踐中尤其如此。相信大家在平時開發(fā)...
    消失er閱讀 12,946評論 15 150
  • 閑話 “程序猿”、“碼農(nóng)”、“軟件攻城獅”,程序員這個職業(yè)現(xiàn)在已經(jīng)被這些網(wǎng)絡流行語給玩壞了。由于程序員門檻越來越低...
    程序員吉森閱讀 1,923評論 0 8
  • 昨天我生日,天氣格外的晴朗,溫度也超給力,對于生日就在立秋前一天心來說,秋天才剛剛開始,就在夏秋交替之處,我又屬于...
    蕊慈閱讀 487評論 1 5
  • 橙光游戲應該陪著許多人長大,有著各式各樣的游戲以及海量的古風歌曲,但從小就對游戲不感冒的我,在聽《遇螢》才聽到過橙...
    微涼_Elena閱讀 9,661評論 5 15

友情鏈接更多精彩內(nèi)容