首页 后端 Java 正文

Lombok和MapStruct整合

   先上操作流程    1、安装Lombok插件,(2020.0.4之后版本的IDEA已内置Lombok,老版本的请自行下载插件)          2、打开setting -> enable annotation processor (启用注解处理器)          OK 完事~ 可以

先上操作流程

1、安装Lombok插件,(2020.0.4之后版本的IDEA已内置Lombok,老版本的请自行下载插件)

Lombok和MapStruct整合  第1张  

2、打开setting -> enable annotation processor (启用注解处理器)

Lombok和MapStruct整合  第2张  

OK 完事~ 可以使用了  送上常用四件套

@Data                    //生成Getter 、Setter 、ToString 、ToString 、EqualsAndHashCode
@AllArgsConstructor      //全参构造
@NoArgsConstructor       //无参构造
@SuperBuilder            //构建器,可以链式构建对象

可以自行在classes里看生成的代码

Lombok和MapStruct整合  第3张  

正常来说到这就结束了,但是。。。在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的过程中,它产生作用的具体流程如下:

  1. javac对源代码进行分析,生成一棵抽象语法树(AST) 

  2. 运行过程中调用实现了"JSR 269 API"的lombok程序 

  3. 此时lombok就对第一步骤得到的AST进行处理,找到@Data注解所在类对应的语法树(AST),然后修改该语法树(AST),增加getter和setter方法定义的相应树节点

  4.  javac使用修改后的抽象语法树(AST)生成字节码文件 

原因:

因为他们他们都是编译时通过AnnotationProcessor生成的class文件,然后MapStruct会用到对象中的get、set方法,然后get、set方法又需要lombok来生成。所以我们需要空着这两者工作顺序。

解决办法:

 lombok 1.18.16之前,添加path

Lombok和MapStruct整合  第4张  

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

Lombok和MapStruct整合  第5张  

本着用新不用旧的想法我选了第二种

参考:

https://blog.csdn.net/u013217730/article/details/107212201

原文:https://juejin.cn/post/7099874296373182478
打赏
海报

本文转载自互联网,旨在分享有价值的内容,文章如有侵权请联系删除,部分文章如未署名作者来源请联系我们及时备注,感谢您的支持。

转载请注明本文地址:https://www.shouxicto.com/article/5214.html

相关推荐

迅速了解-Java网络编程

迅速了解-Java网络编程

   先上操作流程    1、安装Lombok插件,(2020.0.4之后版本的IDEA已内置Lombok,老版本的请自行下...

Java 2022.06.24 0 71

发布评论

ainiaobaibaibaibaobaobeishangbishibizuichiguachijingchongjingdahaqiandaliandangaodw_dogedw_erhadw_miaodw_tuzidw_xiongmaodw_zhutouganbeigeiliguiguolaiguzhanghahahahashoushihaixiuhanheixianhenghorse2huaixiaohuatonghuaxinhufenjiayoujiyankeaikeliankouzhaokukuloukunkuxiaolandelinileimuliwulxhainiolxhlikelxhqiuguanzhulxhtouxiaolxhwahahalxhzanningwennonuokpinganqianqiaoqinqinquantouruoshayanshengbingshiwangshuaishuijiaosikaostar0star2star3taikaixintanshoutianpingtouxiaotuwabiweifengweiquweiwuweixiaowenhaowoshouwuxiangjixianhuaxiaoerbuyuxiaokuxiaoxinxinxinxinsuixixixuyeyinxianyinyueyouhenghengyuebingyueliangyunzanzhajizhongguozanzhoumazhuakuangzuohenghengzuoyi
支付宝
微信
赞助本站