先上操作流程
1昨悼、安裝Lombok插件谤祖,(2020.0.4之后版本的IDEA已內(nèi)置Lombok山橄,老版本的請自行下載插件)
image.png
2悦即、打開setting -> enable annotation processor (啟用注解處理器)
image.png
OK 完事~ 可以使用了 送上常用四件套
@Data //生成Getter 、Setter 雏婶、ToString 辕翰、ToString 培遵、EqualsAndHashCode
@AllArgsConstructor //全參構(gòu)造
@NoArgsConstructor //無參構(gòu)造
@Builder //構(gòu)建器浪藻,可以鏈?zhǔn)綐?gòu)建對象(想build父類請用@SuperBuilder)
復(fù)制代碼
可以自行在classes里看生成的代碼
image.png
正常來說到這就結(jié)束了捐迫,但是。珠移。弓乙。在Lombok和MapStruct一起使用時就會有一些沖突
說明一下:
Lombok和MapStruct都是用來簡化Java代碼的組件,它可以通過AnnotationProcessor在編譯時自動生成代碼钧惧,簡化了我們?nèi)粘i_發(fā)暇韧。
同時,由于是編譯時生成的class文件浓瞪,從安全性和性能角度考慮也會比運(yùn)行時的工具好很多懈玻,例如BeanUtil.copy()
原理:
自從Java 6起,javac就支持“JSR 269 Pluggable Annotation Processing API”規(guī)范乾颁,只要程序?qū)崿F(xiàn)了該API涂乌,就能在javac運(yùn)行的時候得到調(diào)用。 lombok本質(zhì)上就是這樣的一個實(shí)現(xiàn)了"JSR 269 API"的程序英岭。在使用javac的過程中湾盒,它產(chǎn)生作用的具體流程如下:
- javac對源代碼進(jìn)行分析,生成一棵抽象語法樹(AST)
- 運(yùn)行過程中調(diào)用實(shí)現(xiàn)了"JSR 269 API"的lombok程序
- 此時lombok就對第一步驟得到的AST進(jìn)行處理诅妹,找到@Data注解所在類對應(yīng)的語法樹(AST)罚勾,然后修改該語法樹(AST),增加getter和setter方法定義的相應(yīng)樹節(jié)點(diǎn)
- javac使用修改后的抽象語法樹(AST)生成字節(jié)碼文件
原因:
因?yàn)樗麄兯麄兌际蔷幾g時通過AnnotationProcessor生成的class文件吭狡,然后MapStruct會用到對象中的get尖殃、set方法,然后get划煮、set方法又需要lombok來生成送丰。所以我們需要空著這兩者工作順序。
解決辦法:
lombok 1.18.16之前弛秋,添加path
image.png
lombok 1.18.16之后器躏,添加path,必須使用 lombok-mapstruct-binding 插件蟹略。
image.png
本著用新不用舊的想法我選了第二種