Lombok 安裝、入門 - 消除冗長的 java 代碼

來源:互聯網
上載者:User

標籤:ima   turn   自己實現   rac   res   項目   www.   日誌   欄位名   

前言:
    逛開源社區的時候無意發現的,用了一段時間,覺得還可以,特此推薦一下。
    lombok 提供了簡單的註解的形式來協助我們簡化消除一些必須有但顯得很臃腫的 java 代碼。特別是相對於 POJO,光說不做不是我的風格,先來看看吧。

lombok 的官方網址:http://projectlombok.org/  

lombok 其實到這裡我就介紹完了,開個玩笑,其實官網上有 lombok 三分四十九秒的視頻講解,裡面講的也很清楚了,而且還有文檔可以參考。
在這裡我就不扯太多,先來看一下 lombok 的安裝,其實這個官網視頻上也有講到啦

lombok 安裝
    使用 lombok 是需要安裝的,如果不安裝,IDE 則無法解析 lombok 註解。先在官網下載最新版本的 JAR 包,現在是 0.11.2 版本,我用的是 0.11.0
    第一次使用的時候我下載的是最新版本的,也就是我現在用的 0.11.0,到現在已經更新了兩個版本,更新的好快啊 ... ...

1. 雙擊下載下來的 JAR 包安裝 lombok
    我選擇這種方式安裝的時候提示沒有發現任何 IDE,所以我沒安裝成功,我是手動安裝的。如果你想以這種方式安裝,請參考官網的視頻。

2.eclipse / myeclipse 手動安裝 lombok
    1. 將 lombok.jar 複製到 myeclipse.ini / eclipse.ini 所在的檔案夾目錄下
    2. 開啟 eclipse.ini / myeclipse.ini,在最後面插入以下兩行並儲存:
        -Xbootclasspath/a:lombok.jar
        -javaagent:lombok.jar
    3.重啟 eclipse / myeclipse

lombok 註解:
    lombok 提供的註解不多,可以參考官方視頻的講解和官方文檔。
    Lombok 註解線上協助文檔:http://projectlombok.org/features/index.
    下面介紹幾個我常用的 lombok 註解:
        @Data   :註解在類上;提供類所有屬性的 getting 和 setting 方法,此外還提供了equals、canEqual、hashCode、toString 方法
        @Setter:註解在屬性上;為屬性提供 setting 方法
        @Getter:註解在屬性上;為屬性提供 getting 方法
        @Log4j :註解在類上;為類提供一個 屬性名稱為log 的 log4j 日誌對象
        @NoArgsConstructor:註解在類上;為類提供一個無參的構造方法
        @AllArgsConstructor:註解在類上;為類提供一個全參的構造方法

下面是簡單樣本
    1.不使用 lombok 的方案

 1
 2public class Person {
 3
 4    private String id;
 5    private String name;
 6    private String identity;
 7    private Logger log = Logger.getLogger(Person.class);
 8    
 9    public Person() {
10        
11    }
12    
13    public Person(String id, String name, String identity) {
14        this.id              = id;
15        this.name       = name;
16        this.identity  = identity;
17    }
18    
19    public String getId() {
20        return id;
21    }
22    
23    public String getName() {
24        return name;
25    }
26    
27    public String getIdentity() {
28        return identity;
29    }
30    
31    public void setId(String id) {
32        this.id = id;
33    }
34    
35    public void setName(String name) {
36        this.name = name;
37    }
38    
39    public void setIdentity(String identity) {
40        this.identity = identity;
41    }
42}
43


    2.使用 lombok 的方案

 1
 2@Data
 3@Log4j
 4@NoArgsConstructor
 5@AllArgsConstructor
 6public class Person {
 7
 8    private String id;
 9    private String name;
10  private String identity;
11    
12}
13


上面的兩個 java 類,從作用上來看,它們的效果是一樣的,相比較之下,很明顯,使用 lombok 要簡潔許多,特別是在類的屬性較多的情況下,
同時也避免了修改欄位名字時候忘記修改方法名所犯的低級錯誤。最後需要注意的是,在使用 lombok 註解的時候記得要匯入 lombok.jar 包到工程


二、使用方法
使用lombok項目的方法很簡單,分為四個步驟:
1)在需要自動產生getter和setter方法的類上,加上@Data註解
2)在編譯類路徑中加入lombok.jar包
3)使用支援lombok的編譯工具編譯原始碼(關於支援lombok的編譯工具,見“四、支援lombok的編譯工具”)
4)編譯得到的位元組碼檔案中自動產生了getter和setter方法


三、原理分析
接下來進行lombok能夠工作的原理分析,以Oracle的javac編譯工具為例。
自從Java 6起,javac就支援“JSR 269 Pluggable Annotation Processing API”規範,只要程式實現了該API,就能在javac啟動並執行時候得到調用。
舉例來說,現在有一個實現了"JSR 269 API"的程式A,那麼使用javac編譯源碼的時候具體流程如下:
1)javac對原始碼進行分析,產生一棵抽象文法樹(AST)
2)運行過程中調用實現了"JSR 269 API"的A程式
3)此時A程式就可以完成它自己的邏輯,包括修改第一步驟得到的抽象文法樹(AST)
4)javac使用修改後的抽象文法樹(AST)產生位元組碼檔案
詳細的流程圖如下:



lombok本質上就是這樣的一個實現了"JSR 269 API"的程式。在使用javac的過程中,它產生作用的具體流程如下:
1)javac對原始碼進行分析,產生一棵抽象文法樹(AST)
2)運行過程中調用實現了"JSR 269 API"的lombok程式
3)此時lombok就對第一步驟得到的AST進行處理,找到@Data註解所在類對應的文法樹(AST),然後修改該文法樹(AST),增加getter和setter方法定義的相應樹節點
4)javac使用修改後的抽象文法樹(AST)產生位元組碼檔案


四、支援lombok的編譯工具
1)由“三、原理分析”可知,Oracle javac直接支援lombok
2)常用的專案管理工具Maven所使用的java編譯工具來源於配置的第三方工具,如果我們配置這個第三方工具為Oracle javac的話,那麼Maven也就直接支援lombok了
3)Intellij Idea配置的編譯工具為Oracle javac的話,也就直接支援lombok了。
4)Eclipse中使用的不是Oracle javac這個編譯工具,而是自己實現的Eclipse Compiler for Java (ECJ).要想使ECJ支援lombok,得進行設定,具體是在Eclipse程式目錄中的eclipse.ini檔案中添加如下兩行設定:
-javaagent:[lombok.jar所在路徑]
-Xbootclasspath/a:[lombok.jar所在路徑]


五、其他問題
現在使用Intellij Idea作為Java項目的IDE,配置Oracle javac作為編譯工具。
現在有一個A類,其中有一些欄位,沒有建立它們的setter和getter方法,使用了lombok的@Data註解,另外有一個B類,它調用了A類執行個體的相應欄位的setter和getter方法
編譯A類和B類所在的項目,並不會報錯,因為最終產生的A類位元組碼檔案中存在相應欄位的setter和getter方法
但是,IDE發現B類原始碼中所使用的A類執行個體的setter和getter方法在A類原始碼中找不到定義,IDE會認為這是錯誤
要解決以上這個不是真正錯誤的錯誤,可以下載安裝Intellij Idea中的"Lombok plugin"。


六、lombok的罪惡
使用lombok雖然能夠省去手動建立setter和getter方法的麻煩,但是卻大大降低了原始碼檔案的可讀性和完整性,降低了閱讀原始碼的舒適度。

Lombok 安裝、入門 - 消除冗長的 java 代碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.