Java程式碼簡化神器-Lombok

阿豪聊乾貨發表於2016-05-21

一、背景

  前段時間在開源社群中發現了一個比較牛逼的簡化Java程式碼的神器-Lombok,接著自己寫了demo進行測試和練習,感覺真的很不錯,特此分享給需要的小夥伴們~

二、開發之前的準備

  1.lombok的官方網站:http://projectlombok.org/  

  2.lombok IDE外掛安裝

    要想在IDE中使用lombok是需要安裝相關外掛的。如果不安裝,IDE 則無法解析 lombok 註解。安裝之前需要首先在官方網站下載相關jar包,現在官網版本是:1.16.8.

    [1].使用java -jar lombok.jar進行安裝,安裝過程如下

      cmd視窗下執行java -jar lombok.jar命令

      

      出現以下介面,點選確定

      

      這是因為lombok外掛沒辦法直接找到你的IDE的安裝位置。接著你選擇Specify location...按鈕

      

      選擇你的IDE的安裝位置的.exe檔案,點選Install/Update按鈕。

      

      彈出如下彈窗,點選確定,安裝就完成了。

      

      之後,開啟IDE的安裝位置,你會發現在該位置多了lombok.jar在myeclipse.ini / eclipse.ini中也多了-javaagent:lombok.jar一句話

      

      到此為止,eclipse的lombok外掛的安裝已經完成。

    [2].eclipse / myeclipse 手動安裝 lombok

      (1).將 lombok.jar 複製到 myeclipse.ini / eclipse.ini 所在的資料夾目錄下

      (2)開啟 eclipse.ini / myeclipse.ini,在最後面插入以下一行並儲存:

          -javaagent:lombok.jar

      (3).重啟 eclipse / myeclipse

  3.lombok註解

    lombok提供的註解並不多,具體可以參見lombok註解線上幫助文件:http://projectlombok.org/features/index.

    常用的註解: 

        @Data   :註解在類上;提供類所有屬性的 getting 和 setting 方法,此外還提供了equals、canEqual、hashCode、toString 方法。

        @Setter:註解在屬性上;為屬性提供 setting 方法。

        @Getter:註解在屬性上;為屬性提供 getting 方法。

        @Log4j :註解在類上;為類提供一個 屬性名為log 的 log4j 日誌物件。

        @Slf4j:註解在類上,為類提供一個屬性名為log的slf4j日誌物件

        @NoArgsConstructor:註解在類上;為類提供一個無參的構造方法。 

        @AllArgsConstructor:註解在類上;為類提供一個全參的構造方法。

三、lombok實戰開發

  1.沒有使用lombok的程式碼塊

 1 package com.hafiz.zhang.test;
 2 
 3 import org.slf4j.Logger;
 4 import org.slf4j.LoggerFactory;
 5 
 6 public class CommonBean {
 7     private Integer id;
 8     private String name;
 9     private static Logger log = LoggerFactory.getLogger(CommonBean.class);
10     public Integer getId() {
11         return id;
12     }
13     public void setId(Integer id) {
14         this.id = id;
15     }
16     public String getName() {
17         return name;
18     }
19     public void setName(String name) {
20         this.name = name;
21     }
22     public CommonBean(Integer id, String name) {
23         this.id = id;
24         this.name = name;
25     }
26     @Override
27     public String toString() {
28         return "CommonBean [id=" + id + ", name=" + name + "]";
29     }
30     @Override
31     public int hashCode() {
32         final int prime = 31;
33         int result = 1;
34         result = prime * result + ((id == null) ? 0 : id.hashCode());
35         result = prime * result + ((name == null) ? 0 : name.hashCode());
36         return result;
37     }
38     @Override
39     public boolean equals(Object obj) {
40         if (this == obj)
41             return true;
42         if (obj == null)
43             return false;
44         if (getClass() != obj.getClass())
45             return false;
46         CommonBean other = (CommonBean) obj;
47         if (id == null) {
48             if (other.id != null)
49                 return false;
50         } else if (!id.equals(other.id))
51             return false;
52         if (name == null) {
53             if (other.name != null)
54                 return false;
55         } else if (!name.equals(other.name))
56             return false;
57         return true;
58     }
59     public void sayHello(String name){
60         log.info("呼叫 CommonBean 的sayHello方法");
61         System.out.println("Hello " + name);
62     }
63 }

  2.使用了lombok簡化程式碼以後的程式碼塊

 1 package com.hafiz.zhang.test;
 2 
 3 import lombok.Data;
 4 import lombok.extern.slf4j.Slf4j;
 5 
 6 @Data
 7 @Slf4j
 8 public class LombokBean {
 9     private Integer id;
10     private String name;
11     public LombokBean(Integer id, String name) {
12         this.id = id;
13         this.name = name;
14     }
15     public void sayHello(String name){
16         log.info("呼叫 LombokBean 的sayHello方法");
17         System.out.println("Hello " + name);
18     }
19 }

有的小夥伴可能疑問了,到底這樣寫該類具不具有上面普通程式碼bean中包含的方法呢?那我們可以通過簡化類的outline進行檢視,如下

我們發現上那些方法和log物件,在我們的簡化程式碼裡面全都有!是不是太爽了。那我們接下來就進行測試,看看效果是不是一樣?

注:在使用 lombok 註解的時候需要 lombok依賴(一般匯入lombok.jar 包到工程)

 1 package com.hafiz.zhang.test;
 2 
 3 public class TestLombok {
 4     public static void main(String[] args) {
 5         LombokBean test = new LombokBean(1, "Hafiz.Zhang.LombokBean");
 6         CommonBean test2 = new CommonBean(1, "Hafiz.Zhang.CommonBean");
 7         test.sayHello(test.getName());
 8         test2.sayHello(test2.getName());
 9     }
10 }

測試結果

2016-05-21 14:46:21 [ INFO ] [ com.hafiz.zhang.test.LombokBean.sayHello(LombokBean.java:16)-main:0 ] - [ ] 呼叫 LombokBean 的sayHello方法
Hello Hafiz.Zhang.LombokBean
2016-05-21 14:46:21 [ INFO ] [ com.hafiz.zhang.test.CommonBean.sayHello(CommonBean.java:60)-main:5 ] - [ ] 呼叫 CommonBean 的sayHello方法
Hello Hafiz.Zhang.CommonBean

發現效果完全的一樣!爽到爆有木有!

注:lombok基本支援常見的java開發IDE,如:eclipse、myeclipse、idea等,都有對應的外掛,本文直接介紹了eclipse和myeclipse的安裝方式,idea請自行查資料瞭解和安裝。

  

    

相關文章