首頁 > 軟體

Lombok和MapStruct整合詳情

2022-05-22 10:00:03

一、流程

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內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com