Java:Lombok

Java 项目中常见的 Lombok 可以使代码看起来更简洁。 例如省去看着很冗余的 getter / setter。

简介

官网:https://projectlombok.org/

Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.

(谷歌翻译)Lombok项目是一个Java库,它会自动插入您的编辑器和构建工具中,从而使您的Java更加生动有趣。
永远不要再写另一个getter或equals方法,带有一个注释的您的类有一个功能全面的生成器,自动化您的日志记录变量等等。

安装

maven

1
2
3
4
5
6
7
8
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
<scope>provided</scope>
</dependency>
</dependencies>

编辑器

IntelliJ IDEA,Eclipse 等编辑器需要安装插件,插件市场搜索 Lombok 安装即可。

使用示例

我们平时写一个bean,需要有getter,setter,比如:

1
2
3
4
5
6
7
8
9
10
11
public class User {
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

有了 Lombok,这样写即可:

1
2
3
4
5
6
import lombok.Data;

@Data
public class User {
private String name;
}

更多 feature

@SneakyThrows, @Log 等等也很常见,更多参考
https://projectlombok.org/features/all

Lombok 实现原理

自从 Java 6 起,javac就支持“JSR 269 Pluggable Annotation Processing API”规范,只要程序实现了该API,就能在javac运行的时候得到调用。

Lombok本质上就是一个实现了“JSR 269 API”的程序。在使用javac的过程中,它产生作用的具体流程如下:

  1. javac对源代码进行分析,生成一棵抽象语法树(AST)
  2. javac编译过程中调用实现了JSR 269的Lombok程序
  3. 此时Lombok就对第一步骤得到的AST进行处理,找到Lombok注解所在类对应的语法树(AST),然后修改该语法树(AST),增加Lombok注解定义的相应树节点
  4. javac使用修改后的抽象语法树(AST)生成字节码文件,即给class增加新的节点(代码块)