1. 程式人生 > >Java開發速度神器Lombok,Eclipse端安裝使用教程

Java開發速度神器Lombok,Eclipse端安裝使用教程

eight equals reflect 其它 代碼生成器 blog 原理 只需要 string

一、Lombok簡介

Lombok是一個代碼生成器,可以通過簡單的註解形式來幫助我們簡化消除一些必須有但顯得很臃腫的Java代碼的工具,通過使用對應的註解,可以在編譯源碼的時候生成對應的方法。

如:getter setter toString equels方法等都可以自動生成

技術分享圖片

使用 lombok 是需要安裝的,如果不安裝,IDE 則無法解析 lombok 註解。

官方地址:https://projectlombok.org/

二、Lombok安裝

2.1自動安裝

從官網下載Lombok.jar,放入 eclipse.ini所在的文件夾目錄下;

運行方法有兩個:

  一、打開CMD以管理員身份運行,cd 到上面的目錄,運行命令:java -jar lombok.jar

  二、直接雙擊運行,等幾秒後會彈出安裝界面,選擇你要安裝的eclipse.exe,點擊安裝(如果提示權限不夠,用方法一運行)

  查看eclipse.ini文件最後是否多了一行 -javaagent:lombok.jar,有,則安裝成功;

  項目中導入Lombok.jar包,重啟eclipse,開始使用!

2.2手動安裝

手動在 eclipse.ini文件最後添加-javaagent:lombok.jar,保存;

項目中導入Lombok.jar包,重啟eclipse,開始使用!

2.3 Maven

<dependency>

<groupId>org.projectlombok</groupId>

<artifactId>lombok</artifactId>

<version>1.16.2</version>

</dependency>

三、Lombok常規使用

@Getter / @Setter

可以作用在類上和屬性上,放在類上,會對所有的非靜態(non-static)屬性生成Getter/Setter方法,放在屬性上,會對該屬性生成Getter/Setter方法。並可以指定Getter/Setter方法的訪問級別。

@EqualsAndHashCode

默認情況下,會使用所有非瞬態(non-transient)和非靜態(non-static)字段來生成equals和hascode方法,也可以指定具體使用哪些屬性。

@ToString

生成toString方法,默認情況下,會輸出類名、所有屬性,屬性會按照順序輸出,以逗號分割。

@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor

無參構造器、部分參數構造器、全參構造器,當我們需要重載多個構造器的時候,Lombok就無能為力了。

@Data

@ToString, @EqualsAndHashCode, 所有屬性的@Getter, 所有non-final屬性的@Setter和@RequiredArgsConstructor的組合,通常情況下,我們使用這個註解就足夠了。

四、Lombok原理

解了簡單的使用之後,現在應該比較好奇它是如何實現的。整個使用的過程中,只需要使用註解而已,不需要做其它額外的工作,那玄妙之處應該是在註解的解析上。JDK5引入了註解的同時,也提供了兩種解析方式。

4.1運行時解析

運行時能夠解析的註解,必須將@Retention設置為RUNTIME,這樣可以通過反射拿到該註解。java.lang.reflect反射包中提供了一個接口AnnotatedElement,該接口定義了獲取註解信息的幾個方法,Class、Constructor、Field、Method、Package等都實現了該接口,大部分開發者應該都很熟悉這種解析方式。

boolean isAnnotationPresent(Class<? extends Annotation> annotationClass);

<T extends Annotation> T getAnnotation(Class<T> annotationClass);

Annotation[] getAnnotations();

Annotation[] getDeclaredAnnotations();

4.2編譯時解析

4.2.1 Annotation Processing Tool

apt自JDK5產生,JDK7已標記為過期,不推薦使用,JDK8中已徹底刪除,自JDK6開始,可以使用Pluggable Annotation Processing API來替換它,apt被替換主要有2點原因:api都在com.sun.mirror非標準包下沒有集成到javac中,需要額外運行apt的更多介紹可以參見這裏。

4.2.2Pluggable Annotation Processing API

JSR 269,自JDK6加入,作為apt的替代方案,它解決了apt的兩個問題,javac在執行的時候會調用實現了該API的程序,這樣我們就可以對編譯器做一些增強,這時javac執行的過程如下:

Lombok就是使用這種方式實現的,有興趣的話可以去看看其Lombok源碼,對應註解的實現都在HandleXXX中,比如@Getter註解的實現是HandleGetter.handle()。還有一些其它類庫使用這種方式實現,比如Google Auto、Dagger等等。

Java開發速度神器Lombok,Eclipse端安裝使用教程