lombok 的核心思想是:通过注解来消除 java 中的冗长代码,让代码更加简洁、清晰和易于维护。
它通过在编译时自动生成这些代码的字节码(比如 getter、setter、构造函数等),让你在源代码中无需手动编写它们。
它解决了什么问题?
在标准的 java 开发中,我们经常需要为类的属性编写大量重复、模板化的代码,例如:
- getter 和 setter 方法:为每个私有字段生成
getxxx()和setxxx()方法。 - 构造函数:无参构造、全参构造等。
equals()、hashcode()和tostring()方法。- 日志记录器:每次都要声明
private static final logger log = ...。
这些代码本身没有业务逻辑,但又必须存在,导致:
- 源代码冗长:一个简单的 pojo 类可能就有上百行代码。
- 不易维护:如果增加或修改一个字段,你需要手动修改对应的 getter、setter、
equals、hashcode、tostring等方法,很容易出错。
lombok 是如何工作的?
lombok 是一个 java 编译时注解处理器。它的工作流程如下:
- 你编写代码:在 java 类上使用 lombok 注解(如
@data)。 - 编译器调用 lombok:当你使用
javac(或 ide 内置的编译功能)编译代码时,编译器会检测到 lombok 注解。 - lombok 修改 ast:lombok 会介入编译过程,修改 java 编译器的抽象语法树(ast) ,将注解对应的代码(如 getter 方法)的字节码“注入”到正在编译的类中。
- 生成最终的
.class文件:最终生成的.class文件就包含了这些自动生成的方法,就好像是你自己亲手写的一样。
关键点:lombok 修改的是 .class 文件,而不是你的 .java 源文件。所以你的源代码看起来非常干净,但编译后的类却拥有所有完整的方法。
常用注解示例
让我们通过一个例子来直观感受 lombok 的强大。
没有 lombok 的代码:
public class user {
private long id;
private string name;
private integer age;
public user() {
}
public user(long id, string name, integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public long getid() {
return id;
}
public void setid(long id) {
this.id = id;
}
public string getname() {
return name;
}
public void setname(string name) {
this.name = name;
}
public integer getage() {
return age;
}
public void setage(integer age) {
this.age = age;
}
@override
public boolean equals(object o) {
// ... 冗长且容易出错的 equals 实现 ...
}
@override
public int hashcode() {
// ... 冗长且容易出错的 hashcode 实现 ...
}
@override
public string tostring() {
// ... tostring 实现 ...
}
}
使用 lombok 后的代码:
import lombok.data;
import lombok.allargsconstructor;
import lombok.noargsconstructor;
@data // 生成所有字段的getter、setter、equals、hashcode、tostring方法
@noargsconstructor // 生成无参构造函数
@allargsconstructor // 生成全参构造函数
public class user {
private long id;
private string name;
private integer age;
}
看到了吗?只需要 4 行注解,就替代了上面近 60 行的代码! 代码变得极其简洁,可读性大大增强。
常用 lombok 注解列表
| 注解 | 作用 |
|---|---|
| @getter / @setter | 为所有字段或特定字段生成 getter/setter。 |
| @tostring | 生成 tostring() 方法。 |
| @equalsandhashcode | 生成 equals() 和 hashcode() 方法。 |
| @noargsconstructor | 生成无参构造函数。 |
| @allargsconstructor | 生成全参构造函数。 |
| @requiredargsconstructor | 为 final 字段和标记了 @nonnull 的字段生成构造函数。 |
| @data | 最常用,是 @getter, @setter, @tostring, @equalsandhashcode, @requiredargsconstructor 的合集。 |
| @builder | 提供一种优雅的建造者模式来创建对象。 |
| @slf4j | 自动注入一个日志记录器 log(也可以是 @log4j, @log 等)。 |
| @val | 用于声明局部变量,类型会自动推断(类似于 final var)。 |
| @nonnull | 标注在参数或字段上,自动生成空值检查。 |
如何使用 lombok?
添加依赖:在项目的构建工具中加入 lombok 依赖。
- maven:
<dependency> <groupid>org.projectlombok</groupid> <artifactid>lombok</artifactid> <version>1.18.30</version> <!-- 使用最新版本 --> <scope>provided</scope> </dependency>- gradle:
- 安装 ide 插件:由于 lombok 在编译时修改字节码,你的 ide(如 intellij idea, eclipse)需要安装对应的 lombok 插件,才能正确识别和提示这些自动生成的方法。现在 intellij idea 通常已内置支持。
compileonly 'org.projectlombok:lombok:1.18.30' annotationprocessor 'org.projectlombok:lombok:1.18.30'
到此这篇关于java中lombok的实现示例的文章就介绍到这了,更多相关java lombok内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论