一、Lombok介紹
通過簡單註釋來精簡代碼來消除冗長代碼的目的。
二、Lombok優點
- 提高代碼效率
- 使代碼更簡潔
- 消除冗長代碼
- 避免修改字段名字時,忘記修改方法名(這是比較重要的一點)
例子:
public class lombok{
private String name;
public String getName(){
return name;
}
public String setName(name){
this.name = name;
}
}
當我們修改字段名字而忘改方法名字時,如下:
public class lombok{
private String userName;
public String getName(){
return userName;
}
public String setName(name){
this.userName = name;
}
}
字段名改成了userName,但方法名仍沒變,在進行jackson序列化的時候很容易出錯,如果我們不寫字段名,我們存在get方法,當對象序列化成json對象後,字段名字爲name。跟我們目的是不一樣的,若不用lombok的話,此處是需要用改爲getUserName()和setUserName()方法。
三、使用方法
IDEA上安裝Lombok插件,同時Maven中引入Lombok依賴,然後在目標類上標識好相應的Lombok@註解即可,如在類上標記@Data,@Getter,@Setter等。
四、Lombok實現原理
Lombok支持了JSR 269 Pluable Annotation Processing API(JSR 269 可插入註解過程接口),Javac從Java6 開始支持JSR 269 API 規範,只要程序實現了該API就能在javac運行的時候得到調用。而Lombok實現了JSR 269 API ,在編譯時,Javac編譯源碼的具體流程如下:
首先有源代碼,javac對源代碼進行分析,生成一棵抽象語法樹AST,運行過程中調用了實現了JSR 269 API 規範的Lombok程序,即Lombok Annotation Proceesor (Lombok 註解的處理器)。這時候,Lombok Annotation Processor對剛剛生成的AST進行處理,交遞給Lombok Annotation Handler,Lombok Annotation Handler負責找到Lombok註解所在的類對應的語法樹,然後修改該語法樹(修改的內容爲在AST中增加了set get 或其他方法定義的相應樹節點),Lombok Annotation Processor這個處理器之後輸出修改後的抽象語法樹,拿到修改後的語法樹後,最後進行解析和生成字節碼文件。