Lombok 同时使用 @Data 和 @Builder 的巨坑,千万别乱用!(2)

简介: Lombok 同时使用 @Data 和 @Builder 的巨坑,千万别乱用!

解决方法

方法一

Lombok同时使⽤@Data和@Builder的时候,如果要⽣成⽆参构造,需要在代码⾥⾯⼿动引⼊注解@Tolerate,让Lombok在⽣成类的时候,对指定的构造函数不感知。

image.png

方法二

直接使用无参构造器+有参构造器的方式,@RequiredArgsConstructor 来构建有参,@NoArgsConstructor来构建无参构造器,如图所示:

image.png

编译后效果:

image.png

Lombok原理

Java的编译分为以下⼏个阶段:

解析与填充符号表->注解处理->分析与字节码⽣成->⽣成⼆进制class⽂件。

  • Lombok 使⽤的是 JDK 6 实现的 JSR 269: Pluggable Annotation Processing API (编译期的注解处理器),它是在编译期时把 Lombok 的注解代码,转换为常规的 Java ⽅法⽽实现注⼊。
  • 在编译期阶段,当 Java 源码被抽象成语法树 (AST) 之后,Lombok 会根据⾃⼰的注解处理器动态的修改AST,增加新的代码 (节点),在这⼀切执⾏之后,再通过分析⽣成了最终的字节码 (.class) ⽂件,这就是Lombok 的执⾏原理。

可以借助注解处理器实现⼀个简单的 Setter,我们的实现步骤是:

  • ⾃定义⼀个注解标签接⼝,并实现⼀个⾃定义的注解处理器;
  • 利⽤ tools.jar 的 javac api 处理 AST (抽象语法树)3. 使⽤⾃定义的注解处理器编译代码。
  1. 定义⾃定义注解和注解处理器

⾸先创建⼀个 MySetter.java ⾃定义⼀个注解,代码如下:

image.png

再实现⼀个⾃定义的注解处理器,代码如下:

image.png

image.png

image.png

测试类如下:

image.png

  1. 对注解处理器进⾏编译,随后使⽤注解处理器对类进⾏编译

⾸先需要先对注解处理器进⾏编译(javac -cp ⽤于引⼊第三⽅jar包进⾏编译)

image.png

image.png

总结

当然尽管测试类已经⽣成Setter⽅法,但是因为是在编译时期⽣成的,因此我们在开发的时候是没法直接调⽤Setter⽅法的,因此Lombok提供了插件机制,⽅便我们在开发的时候可以直接去调⽤Lombok的特性。

相关文章
|
28天前
|
IDE 安全 Java
Lombok的优缺点不建议使用
Lombok的优缺点不建议使用
20 0
|
1月前
有关使用Lombok@Builder注解构建对象返回为空
有关使用Lombok@Builder注解构建对象返回为空
24 1
QGS
|
3月前
|
Java 关系型数据库 MySQL
浅学lombok
浅学lombok
QGS
31 1
|
3月前
|
Java API Maven
开发人员必备的常用工具lombok
开发人员必备的常用工具lombok
45 1
|
3月前
|
IDE Java API
Lombok入门使用教程及其优缺点详解
Lombok入门使用教程及其优缺点详解
41 0
|
3月前
|
JSON IDE Java
Java使用Lombok详解
Java使用Lombok详解
|
3月前
|
搜索推荐 Java 编译器
Javac 编译自定义注解及分析 Lombok 的注解实现
Javac 编译自定义注解及分析 Lombok 的注解实现
64 0
|
4月前
|
Java 大数据 Maven
Java基础之一文快速掌握Lombok的使用
Java基础之一文快速掌握Lombok的使用
36 0
|
4月前
|
Java 编译器
lombok的val
lombok的val
52 0
|
4月前
|
Java API