lombok 中的@Data注解


今天看到有代碼中的Dao包中的類文件,寫的極其簡潔,甚至引起了開發工具InteliJ的報錯,然后程序還能穩健地跑起來。

import lombok.Data;

@Data
public class VaildCode {

	private String	code;
	private long	expTime;

}

原來是這個類加了@Data注解,所有Java代碼中不需要生成getters and setters,而在編譯的時候會自動生成getters and setters


點擊導入的包,查看到如下

 

查看到pom.xml文件中,對應的依賴是

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

常用的注解如下==

 

lombok 

https://projectlombok.org/

工作的原理分析,以Oracle的javac編譯工具為例。
自從Java 6起,javac就支持“JSR 269 Pluggable Annotation Processing API”規范,只要程序實現了該API,就能在javac運行的時候得到調用。
舉例來說,現在有一個實現了”JSR 269 API”的程序A,那么使用javac編譯源碼的時候具體流程如下:


javac對源代碼進行分析,生成一棵**抽象語法樹(AST) **
運行過程中調用實現了”JSR 269 API”的A程序
此時A程序就可以完成它自己的邏輯,包括修改第一步驟得到的抽象語法樹(AST)
javac使用修改后的抽象語法樹(AST)生成字節碼文件


所以lombok本質上就是這樣的一個實現了”JSR 269 API”的程序。在使用javac的過程中,結合官方說明,它編譯的流程如下:


javac對源代碼進行分析,生成一棵**抽象語法樹(AST)****
運行過程中調用實現了”JSR 269 API”的lombok程序
此時lombok就對第一步驟得到的AST進行處理,找到@Data注解所在類對應的語法樹(AST),然后修改該語法樹(AST),增加getter和setter方法定義的相應樹節點
javac使用修改后的抽象語法樹(AST)生成字節碼文件

 

優點:

能通過注解的形式自動生成構造器、getter/setter、equals、hashcode、toString等方法,提高了一定的開發效率
讓代碼變得簡潔,不用過多的去關注相應的方法
屬性做修改時,也簡化了維護為這些屬性所生成的getter/setter方法等


缺點:

不支持多種參數構造器的重載
雖然省去了手動創建getter/setter方法的麻煩,但大大降低了源代碼的可讀性和完整性,降低了閱讀源代碼的舒適度

lombok的實現:就是元注解出現后注解運行生命周期里面的編譯周期,這個就是 JSR 269 Pluggable Annotation Processing API,就是源代碼在編譯成字節碼的時候修改了語法樹的節點規則進行了加強生成,
以后可以更加快捷的敲代碼了。

 

知乎上對lombok插件得看法也兩極化,有人覺得簡化代碼,閱讀代碼更舒適;也有人極其反對

 

只能說愛用不用,不用別詆毀。別人用了至少你要看得懂。

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM