Lombok和MapStruct整合詳情
一、流程
1、安裝Lombok插件
(2020.0.4之後版本的IDEA已內置Lombok,老版本的請自行下載插件)
2、啟用註解處理器
打開setting -> enable annotation processor (啟用註解處理器)
OK 完事~ 可以使用瞭 送上常用四件套:
@Data //生成Getter 、Setter 、ToString 、ToString 、EqualsAndHashCode @AllArgsConstructor //全參構造 @NoArgsConstructor //無參構造 @SuperBuilder //構建器,可以鏈式構建對象
可以自行在classes裡看生成的代碼:
正常來說到這就結束瞭,但是。。。在Lombok和MapStruct一起使用時就會有一些沖突
說明一下:
Lombok和MapStruct都是用來簡化Java代碼的組件,它可以通過AnnotationProcessor在編譯時自動生成代碼,簡化瞭我們日常開發。
同時,由於是編譯時生成的class文件,從安全性和性能角度考慮也會比運行時的工具好很多,例如BeanUtil.copy()
二、原理
自從Java 6起,javac就支持“JSR 269 Pluggable Annotation Processing API”規范,隻要程序實現瞭該API,就能在javac運行的時候得到調用。 lombok本質上就是這樣的一個實現瞭"JSR 269 API"的程序。在使用javac的過程中,它產生作用的具體流程如下:
- javac對源代碼進行分析,生成一棵抽象語法樹(AST)
- 運行過程中調用實現瞭"JSR 269 API"的lombok程序
- 此時lombok就對第一步驟得到的AST進行處理,找到@Data註解所在類對應的語法樹(AST),然後修改該語法樹(AST),增加getter和setter方法定義的相應樹節點
- javac使用修改後的抽象語法樹(AST)生成字節碼文件
三、原因
因為他們他們都是編譯時通過AnnotationProcessor生成的class文件,然後MapStruct會用到對象中的get、set方法,然後get、set方法又需要lombok來生成。所以我們需要空著這兩者工作順序。
四、解決辦法
lombok 1.18.16之前,添加path
lombok 1.18.16之後,添加path,必須使用 lombok-mapstruct-binding 插件。
本著用新不用舊的想法我選瞭第二種
到此這篇關於Lombok和MapStruct整合詳情的文章就介紹到這瞭,更多相關Lombok和MapStruct內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 基於Lombok集成springboot遇到的坑
- Spring Boot整合Lombok的方法詳解
- MyBatisPlus+Lombok實現分頁功能的方法詳解
- Lombok的詳細使用及優缺點總結
- SpringBoot圖文並茂講解Lombok庫的安裝與使用