技术派代码更简洁之整合Lombok
Spring Boot 早在 2.1.x 版本后就在 starter 中内置了 Lombok 依赖,Intellij IDEA 也早在 IDEA 2020.3 版本的时候内置了 Lombok 插件。为什么它们都要支持 Lombok 呢?Lombok 到底有啥牛皮的?今天我们就来补上这一课。
一、Lombok 的自我介绍
Lombok 在官网是这样作自我介绍的:
Project Lombok makes java a spicier language by adding 'handlers' that know how to build and compile simple, boilerplate-free, not-quite-java code.
大致的意思就是:Lombok 是个好类库,可以为 Java 代码添加一些“处理程序”,让其变得更简洁、更优雅。在我看来,Lombok 最大的好处就在于通过注解的形式来简化 Java 代码,简化到什么程度呢?
作为一名 Java 程序员,我相信你一定写过不少的 getter / setter,尽管可以借助 IDE 来自动生成,可一旦 Javabean 的属性很多,就免不了要产生大量的 getter / setter,这会让代码看起来不够简练,就像老太婆的裹脚布一样,又臭又长。
class Cmower {
private int age;
private String name;
private BigDecimal money;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getMoney() {
return money;
}
public void setMoney(BigDecimal money) {
this.money = money;
}
}
Lombok 可以通过注解的方式,在编译的时候自动为 Javabean 的属性生成 getter / setter,不仅如此,还可以生成构造方法、equals方法、hashCode方法,以及 toString方法。注意是在编译的时候哦,源码当中是没有 getter / setter 等等的。
@Getter
@Setter
class CmowerLombok {
private int age;
private String name;
private BigDecimal money;
}
瞧一瞧,源码看起来苗条多了,对不对?
二、集成 Lombok
如果项目使用 Maven 构建的话,添加Lombok 的依赖就变得轻而易举了。
org.projectlombok
lombok
1.18.6
provided
其中 scope=provided,就说明 Lombok 只在编译阶段生效。也就是说,Lombok 会在编译期静悄悄地将带 Lombok 注解的源码文件正确编译为完整的 class 文件。
SpringBoot 2.1.x 版本后不需要再显式地添加 Lombok 依赖了。之后,还需要为 Intellij IDEA 安装 Lombok 插件,否则 Javabean 的 getter / setter 就无法自动编译,也就不能被调用。不过,新版的 Intellij IDEA 也已经内置好了,不需要再安装。

三、常用的 Lombok 注解
1)@Getter / @Setter
@Getter / @Setter 用起来很灵活,比如说像下面这样:
class CmowerLombok {
@Getter @Setter private int age;
@Getter private String name;
@Setter private BigDecimal money;
}
字节码文件反编译后的内容是:
class CmowerLombok {
private int age;
private String name;
private BigDecimal money;
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return this.name;
}
public void setMoney(BigDecimal money) {
this.money = money;
}
}
2)@ToString
打印日志的好帮手哦。
@ToString
class CmowerLombok {
private int age;
private String name;
private BigDecimal money;
}
字节码文件反编译后的内容是:
class CmowerLombok {
private int age;
private String name;
private BigDecimal money;
public String toString() {
return "CmowerLombok(age=" + this.age + ", name=" + this.name + ", money=" + this.money + ")";
}
}
3)val
在编写 JavaScript 代码时,我一直觉得 var 这个变量声明类型用起来特别方便。Lombok 也提供了一个类似的。
class CmowerLombok {
public void test() {
val names = new ArrayList();
names.add("沉默王二");
val name = names.get(0);
System.out.println(name);
}
}
字节码文件反编译后的内容是:
class CmowerLombok {
public void test() {
ArrayList names = new ArrayList();
names.add("沉默王二");
String name = (String) names.get(0);
System.out.println(name);
}
}
4)@Data
@Data 注解可以生成 getter / setter、equals、hashCode,以及 toString,是个总和的选项。
@Data
class CmowerLombok {
private int age;
private String name;
private BigDecimal money;
}
字节码文件反编译后的内容是:
class CmowerLombok {
private int age;
private String name;
private BigDecimal money;
public int getAge() {
return this.age;
}
public String getName() {
return this.name;
}
public BigDecimal getMoney() {
return this.money;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setMoney(BigDecimal money) {
this.money = money;
}
public boolean equals(Object o) {
if (o == this) {
return true;
} else if (!(o instanceof CmowerLombok)) {
return false;
} else {
CmowerLombok other = (Cmower...未能定位到原文的划线
企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。
1. 微信扫右侧的优惠券加入知识星球
2. 解锁星球的实战项目教程和源码: 项目源码+教程获取
真诚点赞 诚不我欺
回复