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

前言:
    逛開源社區的時候無心發現的,用了一段時間,以爲還能夠,特此推薦一下。
    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 的方案
html

 1
 2 public 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 的方案
java

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


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


2、使用方法
使用lombok項目的方法很簡單,分爲四個步驟:
1)在須要自動生成getter和setter方法的類上,加上@Data註解
2)在編譯類路徑中加入lombok.jar包
3)使用支持lombok的編譯工具編譯源代碼(關於支持lombok的編譯工具,見「4、支持lombok的編譯工具」)
4)編譯獲得的字節碼文件中自動生成了getter和setter方法


3、原理分析
接下來進行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)生成字節碼文件


4、支持lombok的編譯工具
1)由「3、原理分析」可知,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所在路徑]


5、其餘問題
如今使用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"。


6、lombok的罪惡
使用lombok雖然可以省去手動建立setter和getter方法的麻煩,可是卻大大下降了源代碼文件的可讀性和完整性,下降了閱讀源代碼的溫馨度。eclipse

相關文章
相關標籤/搜索