lombok 中的@Data注解
今天看到有代碼中的Dao包中的類文件,寫的極其簡潔,甚至引起了開發(fā)工具InteliJ的報錯,然后程序還能穩(wěn)健地跑起來。
| 1 2 3 4 5 6 7 8 9 | 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”規(guī)范,只要程序實現(xiàn)了該API,就能在javac運行的時候得到調用。
舉例來說,現(xiàn)在有一個實現(xiàn)了”JSR 269 API”的程序A,那么使用javac編譯源碼的時候具體流程如下:
javac對源代碼進行分析,生成一棵**抽象語法樹(AST) **
運行過程中調用實現(xiàn)了”JSR 269 API”的A程序
此時A程序就可以完成它自己的邏輯,包括修改第一步驟得到的抽象語法樹(AST)
javac使用修改后的抽象語法樹(AST)生成字節(jié)碼文件
所以lombok本質上就是這樣的一個實現(xiàn)了”JSR 269 API”的程序。在使用javac的過程中,結合官方說明,它編譯的流程如下:
javac對源代碼進行分析,生成一棵**抽象語法樹(AST)****
運行過程中調用實現(xiàn)了”JSR 269 API”的lombok程序
此時lombok就對第一步驟得到的AST進行處理,找到@Data注解所在類對應的語法樹(AST),然后修改該語法樹(AST),增加getter和setter方法定義的相應樹節(jié)點
javac使用修改后的抽象語法樹(AST)生成字節(jié)碼文件
?
優(yōu)點:
能通過注解的形式自動生成構造器、getter/setter、equals、hashcode、toString等方法,提高了一定的開發(fā)效率
讓代碼變得簡潔,不用過多的去關注相應的方法
屬性做修改時,也簡化了維護為這些屬性所生成的getter/setter方法等
缺點:
不支持多種參數(shù)構造器的重載
雖然省去了手動創(chuàng)建getter/setter方法的麻煩,但大大降低了源代碼的可讀性和完整性,降低了閱讀源代碼的舒適度
lombok的實現(xiàn):就是元注解出現(xiàn)后注解運行生命周期里面的編譯周期,這個就是 JSR 269 Pluggable Annotation Processing API,就是源代碼在編譯成字節(jié)碼的時候修改了語法樹的節(jié)點規(guī)則進行了加強生成,
以后可以更加快捷的敲代碼了。
?
知乎上對lombok插件得看法也兩極化,有人覺得簡化代碼,閱讀代碼更舒適;也有人極其反對,
?
只能說愛用不用,不用別詆毀。別人用了至少你要看得懂。
-------------------------?A little Progress a day makes you a big success...?----------------------------
?
來源:https://www.cnblogs.com/qianjinyan/p/9576939.html
總結
以上是生活随笔為你收集整理的lombok 中的@Data注解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 房贷首付最低多少 房贷计算方式介绍
- 下一篇: idea快速从dao层跳转到mapper