带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(8)

简介: 带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(8)

带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(7)https://developer.aliyun.com/article/1339757?groupCode=taobaotech


探究引入顺序

 

本文在第一章提到,引入MapStruct时,必须要注意Lombok包与MapStruct包的顺序,关于这一点,网上很少有  相关文章提及。

 

问题来源

 

在复现《告别BeanUtils,Mapstruct入门到精通》代码时,文中提到的引入顺序是这样的:

 

<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.0.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.0.Final</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>

 

 

实践发现,在一个空工程中,如果按照上述写法引入MapStruct,其并不能正常工作。

 

而当修改引入顺序为以下方案时,则MapStruct可以正常使用。

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.0.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.0.Final</version>
</dependency>

 

进一步测试发现,只有mapstruct-processor包在lombok包下面时,MapStruct才能够正常使用。

 

MapStruct基本原理

 

为了探究上述问题产生的原因,我们首先要理解MapStruct的基本原理。

 

MapStruct与其他Bean映射库最大的不同就是,其在编译期间生成转换代码,而不是在运行时通过反射生成代 码。

 

为了更直观的理解这一点,可以从target中找到MapStruct自动生成的对应的ConveterImpl类,如下图所示:

image.png

 

 

 

即MapStruct为我们编写的Convert抽象类自动生成了一个实现。

而Lombok也是在编译时自动生成代码,那么问题大概率就出现在这里了。

 

带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(9)https://developer.aliyun.com/article/1339755?groupCode=taobaotech

相关文章
|
前端开发 JavaScript
JavaScript快捷方式:15个简写技巧,让你的代码事半功倍!
JavaScript快捷方式:15个简写技巧,让你的代码事半功倍!
|
API
Swagger中配置了@ApiModelProperty的allowableValues属性但不显示的问题
Swagger中配置了@ApiModelProperty的allowableValues属性但不显示的问题
1109 0
Swagger中配置了@ApiModelProperty的allowableValues属性但不显示的问题
|
10月前
|
前端开发
Promise的then方法返回的新Promise对象有什么特点?
Promise的then方法返回的新Promise对象有什么特点?
661 2
|
JavaScript
可自由配置的jQuery消息提示框插件toast
jquery.toast.js是一款可自由配置的jQuery消息提示框插件。该消息提示框可以自定义背景和前景色,提示框的位置,提示框的显示时间,提示框的动画效果等。
560 2
|
缓存 监控 Java
【建议收藏】Tomcat 优化总结
以上是V 哥整理的 Tomcat 优化的一些点,希望对你有所帮助,目前Tomcat已更新到11版本,你在项目中是使用哪个版本呢,如果有一些独到的优化策略,欢迎留言告诉我,感谢。
657 0
|
Java 编译器 测试技术
|
移动开发 前端开发 JavaScript
页面手写签名实现:利用Canvas技术将签名保存为图片
页面手写签名实现:利用Canvas技术将签名保存为图片
827 0
|
缓存 Linux
centos内存检测工具
【6月更文挑战第1天】centos内存检测工具
493 3
|
JavaScript 前端开发
JavaScript中call()与apply()的作用与区别?
JavaScript中call()与apply()的作用与区别?
386 3