Lombok和MapStruct整合詳情
一、流程
1、安裝Lombok插件
(2020.0.4之后版本的IDEA已內(nèi)置Lombok,老版本的請(qǐng)自行下載插件)

2、啟用注解處理器
打開(kāi)setting -> enable annotation processor (啟用注解處理器)

OK 完事~ 可以使用了 送上常用四件套:
@Data //生成Getter 、Setter 、ToString 、ToString 、EqualsAndHashCode @AllArgsConstructor //全參構(gòu)造 @NoArgsConstructor //無(wú)參構(gòu)造 @SuperBuilder //構(gòu)建器,可以鏈?zhǔn)綐?gòu)建對(duì)象
可以自行在classes里看生成的代碼:

正常來(lái)說(shuō)到這就結(jié)束了,但是。。。在Lombok和MapStruct一起使用時(shí)就會(huì)有一些沖突
說(shuō)明一下:
Lombok和MapStruct都是用來(lái)簡(jiǎn)化Java代碼的組件,它可以通過(guò)AnnotationProcessor在編譯時(shí)自動(dòng)生成代碼,簡(jiǎn)化了我們?nèi)粘i_(kāi)發(fā)。
同時(shí),由于是編譯時(shí)生成的class文件,從安全性和性能角度考慮也會(huì)比運(yùn)行時(shí)的工具好很多,例如BeanUtil.copy()
二、原理
自從Java 6起,javac就支持“JSR 269 Pluggable Annotation Processing API”規(guī)范,只要程序?qū)崿F(xiàn)了該API,就能在javac運(yùn)行的時(shí)候得到調(diào)用。 lombok本質(zhì)上就是這樣的一個(gè)實(shí)現(xiàn)了"JSR 269 API"的程序。在使用javac的過(guò)程中,它產(chǎn)生作用的具體流程如下:
- javac對(duì)源代碼進(jìn)行分析,生成一棵抽象語(yǔ)法樹(shù)(AST)
- 運(yùn)行過(guò)程中調(diào)用實(shí)現(xiàn)了"JSR 269 API"的lombok程序
- 此時(shí)lombok就對(duì)第一步驟得到的AST進(jìn)行處理,找到@Data注解所在類(lèi)對(duì)應(yīng)的語(yǔ)法樹(shù)(AST),然后修改該語(yǔ)法樹(shù)(AST),增加getter和setter方法定義的相應(yīng)樹(shù)節(jié)點(diǎn)
- javac使用修改后的抽象語(yǔ)法樹(shù)(AST)生成字節(jié)碼文件
三、原因
因?yàn)樗麄兯麄兌际蔷幾g時(shí)通過(guò)AnnotationProcessor生成的class文件,然后MapStruct會(huì)用到對(duì)象中的get、set方法,然后get、set方法又需要lombok來(lái)生成。所以我們需要空著這兩者工作順序。
四、解決辦法
lombok 1.18.16之前,添加path

lombok 1.18.16之后,添加path,必須使用 lombok-mapstruct-binding 插件。

本著用新不用舊的想法我選了第二種
到此這篇關(guān)于Lombok和MapStruct整合詳情的文章就介紹到這了,更多相關(guān)Lombok和MapStruct內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java人機(jī)猜拳實(shí)現(xiàn)的思路及方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Java人機(jī)猜拳實(shí)現(xiàn)的思路及方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
SpringBoot實(shí)現(xiàn)埋點(diǎn)監(jiān)控
本文主要介紹了SpringBoot實(shí)現(xiàn)埋點(diǎn)監(jiān)控,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
mybatis(mybatis-plus)映射文件(XML文件)中特殊字符轉(zhuǎn)義的實(shí)現(xiàn)
XML 文件在解析時(shí)會(huì)將五種特殊字符進(jìn)行轉(zhuǎn)義,本文主要介紹了mybatis(mybatis-plus)映射文件(XML文件)中特殊字符轉(zhuǎn)義的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12
java多線程數(shù)據(jù)分頁(yè)處理實(shí)例講解
在本篇內(nèi)容里小編給大家分享了一篇關(guān)于java多線程數(shù)據(jù)分頁(yè)處理實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-01-01
JAVA根據(jù)ip地址獲取歸屬地的實(shí)現(xiàn)方法
本文主要介紹了JAVA根據(jù)ip地址獲取歸屬地的實(shí)現(xiàn)方法,要通過(guò)Java程序獲取IP地址對(duì)應(yīng)的城市,需要借助第三方的IP地址庫(kù),下面就來(lái)介紹一下,感興趣的可以了解一下2023-10-10
SWT(JFace) Wizard(Eclipse插件編程必備)
SWT(JFace)小制作:Wizard(Eclipse插件編程必備)2009-06-06

