Lombok和MapStruct整合详情

目录
  • 一、流程
    • 1、安装Lombok插件
    • 2、启用注解处理器
  • 二、原理
  • 三、原因
  • 四、解决办法

一、流程

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内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot整合Lombok及常见问题解决

    目录 Lombok 2. Lombok注解失效原因 整合过程 1. 引入Lombok依赖: 2. 安装Lombok插件 优点与缺点(可能出现的问题即解决方法) Lombok Lombok能以简单的注解形式来简化java代码,从而提高开发人员的开发效率.其本身是一个优秀的Java代码库,它采用了一种投机取巧的语法糖,简化了Java的编码,为Java代码的精简提供了一种方式,但Lombok并非一个标准的Java库. 在web开发过程中经常需要写的Java类,都需要花时间去添加相应的getter/se

  • SpringBoot 整合mapstruct的实现步骤

    目录 前言 mapstruct 使用来干什么的? mapstruct 相对于BeanUtils的优势在哪? 编码 引入依赖 创建 DTO.VO 运行测试用例 怎么解决mapstruct 失效呢? mapstruct常规操作 不同字段映射 LIST转换 总结 前言 在项目中,如果我们要遵循分层领域模型规约: 话,肯定避免不了在DTO.VO.BO.AO.VO.Query等实体的转换,我们通常有几种做法: 手动一个个字段的赋值通过反序列化的手段,必须先转成JSON字符串,再转回来使用Spring的Be

  • SpringBoot 2.x 整合Lombok的方法示例

    简介 lombok是一个编译级别的插件,它可以在项目编译的时候生成一些代码.比如日常开发过程中需要生产大量的JavaBean文件,每个JavaBean都需要提供大量的get和set方法,如果字段较多且发生变动的话修改起来相对繁琐,相应的lombok可以通过注解(@getter,@setter)为我们省去手动创建getter和setter方法的麻烦,它能够在我们编译源码的时候自动帮我们生成getter和setter方法. 即它最终能够达到的效果是:在源码中没有getter和setter方法,但是在

  • Spring Boot整合Lombok的方法详解

    上篇文章给大家介绍了,喜欢的朋友点击查看下. SpringBoot 开发提速神器 Lombok+MybatisPlus+SwaggerUI Lombok为啥这么牛逼?SpringBoot和IDEA官方都要支持它 一.Lombok简介 Lombok 是一种 Java 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO).它通过注释实现这一目的.通过在开发环境中实现  Lombok,开发人员可以节省构建诸如 hashCode() 和 equals() 这样

  • Lombok和MapStruct整合详情

    目录 一.流程 1.安装Lombok插件 2.启用注解处理器 二.原理 三.原因 四.解决办法 一.流程 1.安装Lombok插件 (2020.0.4之后版本的IDEA已内置Lombok,老版本的请自行下载插件) 2.启用注解处理器 打开setting -> enable annotation processor (启用注解处理器) OK 完事~ 可以使用了  送上常用四件套: @Data //生成Getter .Setter .ToString .ToString .EqualsAndHash

  • SpringBoot分离打Jar包的两种配置方式

    目录 方式一:基于maven-jar-plugin 方式二:基于spring-boot-maven-plugin 附录:参考链接 SpringBoot分离打Jar包的两种方式 方式一:基于maven-jar-plugin 此方式基于这个小伙伴的配置改的:https://www.jb51.net/article/188606.htm 注意 这种方式打包出来的Jar基于插件提供的类加载器启动:org.springframework.boot.loader.PropertiesLauncher 所有依

  • 实战分布式医疗挂号系统登录接口整合阿里云短信详情

    目录 步骤1:搭建service-user用户模块 1.启动类&配置网关 步骤2:整合JWT 步骤3: 搭建service-msm短信模块(整合阿里云短信) 1.启动类&配置网关 4.三层调用 步骤4:登录页面前端 1.封装api请求 2.添加登录组件 3.登录全局事件 附加:用户认证与网关整合 1.在服务网关添加fillter 2.调整前端代码 本篇文章完成的需求: 1,登录采取弹出层的形式. 2,登录方式: (1)手机号码+手机验证码 (2)微信扫描(后文完成) 3,无注册界面,第一次

  • Java Spring集成MapStruct详情

    目录 待转换的类 目标类 转换接口 测试类 前言: MapStruct支持Spring的依赖注入机制,只须要在@Mapper注解中添加componentModel配置项,并设置为“spring”便可. 待转换的类 @Getter @Setter @ToString @Builder @AllArgsConstructor @NoArgsConstructor public class Spu { private Integer id; private String name; private S

  • springboot 整合 dubbo 的实现组聚合详情

    目录 消费者 自定义聚合策略 如何自定义 dubbo 聚合策略? 提供者 接口及其实现 表结构及数据 消费者 yml 文件配置: dubbo: application: name: dubbo-gateway registry: address: zookeeper://127.0.0.1:2181 server: true provider: timeout: 3000 protocol: name: dubbo port: 20881 controller 类: @RestControlle

  • SpringBoot整合SpringSession实现分布式登录详情

    目录 Session 共享 为什么服务器 A 登录后,请求发到服务器 B,不认识该用户? 解决方案 SpringBoot整合SpringSession实现分布式登录 Session 共享 比如两个域名: aaa.yupi.com bbb.yupi.com 如果要共享 cookie,可以种一个更高层的公共域名,比如 yupi.com 为什么服务器 A 登录后,请求发到服务器 B,不认识该用户? 用户在 A 登录,所以 session(用户登录信息)存在了 A 上 结果请求 B 时,B 没有用户信息

  • Springboot 整合 RabbitMQ 消息队列 详情

    目录 生产者工程 POM依赖 application文件 生产者业务代码 测试 Direct 模式 业务代码 消费者 消息监听 Topic 模式 生产者 消费者 生产者工程 POM依赖 可以在创建工程时直接选择添加依赖. application文件 因为rabbitmq具有默认地址及用户信息,所以如果是本地rabbitmq可以不需要进行配置. RabbitMQ配置文件: 在使用相关交换机及队列时,我们需要实现声明交换机及队列,如果没有对应信息,则启动项目会失败.所以在使用springboot整合

随机推荐