如何在 Spring Boot 中整合 Lombok 简化 getter/setter 样板代码?
2026/9/15 12:33:39 网站建设 项目流程

如何在 Spring Boot 中整合 Lombok 简化 getter/setter 样板代码?

【免费下载链接】toBeBetterJavaer一份通俗易懂、风趣幽默的Java学习指南,内容涵盖Java基础、Java并发编程、Java虚拟机、Java企业级开发、Java面试等核心知识点。学Java,就认准二哥的Java进阶之路😄项目地址: https://gitcode.com/GitHub_Trending/to/toBeBetterJavaer

如果你在用 Spring Boot 编写业务代码,实体类(JavaBean)的属性一多,getter / setter的样板代码就会变得又臭又长。这篇文章基于《二哥的Java进阶之路》中的 Spring Boot 整合 Lombok 一篇文档,给出在 Spring Boot 项目中整合 Lombok 的完整路径:添加依赖、用注解替代手写 getter/setter,并验证这些方法确实被生成。适用前提是项目使用 Maven 构建、用 Intellij IDEA 开发。

为什么需要 Lombok

先看一个没有 Lombok 时的 JavaBean,三个属性就要写 6 个方法:

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,还可以生成构造方法、equalshashCodetoString方法。注意生成发生在编译阶段——源码中没有这些方法,但编译出的 class 文件里有。

用 Lombok 改写后,同样的类只剩字段声明:

@Getter @Setter class CmowerLombok { private int age; private String name; private BigDecimal money; }

准备条件

整合 Lombok 之前,确认两件事:

  1. 项目使用 Maven 构建,并且已经有一个可以编译启动的 Spring Boot 项目。项目可以通过 Spring Initializr 或 IDEA 的新建 Spring Boot 项目向导生成,搭建第一个 Spring Boot 项目 一篇有完整步骤。
  2. Intellij IDEA 版本。IDEA 从 2020.3 版本起内置了 Lombok 插件;更早的版本需要手动安装 Lombok 插件,否则 JavaBean 的getter / setter无法自动编译、也不能被调用。

添加 Lombok 依赖

Spring Boot 从 2.1.x 版本之后,starter 中已经内置了 Lombok 依赖,不需要再显式添加。也就是说,如果你的项目基于 Spring Boot 2.1.x 及以上版本,跳过本节直接进入使用即可。

如果使用 Maven 构建的普通 Java 项目(或需要显式声明),在pom.xml中添加依赖:

<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.6</version> <scope>provided</scope> </dependency>

这里的scope=provided很关键:它说明 Lombok 只在编译阶段生效。Lombok 会在编译期把带注解的源码文件正确编译为完整的 class 文件,运行时不需要这个 jar。IDEA 插件推荐 一文中给出的写法省略了 version,由依赖管理提供,两者含义一致。

用注解替代 getter/setter

依赖就位后,在类上或字段上使用注解即可。文档给出的两种用法:

类级别,一个注解覆盖所有字段:

@Getter @Setter class CmowerLombok { private int age; private String name; private BigDecimal money; }

字段级别,按字段精细控制——这是日常写 VO、DTO 时最常用的方式:

class CmowerLombok { @Getter @Setter private int age; @Getter private String name; @Setter private BigDecimal money; }

如果希望一次性生成getter / setterequalshashCodetoString,用@Data注解即可,它是这些能力的总和:

@Data class CmowerLombok { private int age; private String name; private BigDecimal money; }

除了这三个与 getter/setter 直接相关的注解,文档中还介绍了@ToString(生成toString,方便打日志)、@Builder(建造者模式链式赋值)、@Val(类似var的局部变量声明)、@Slf4j(自动生成log字段用于日志,logback 一篇 中有实际用例)等,可按需查阅原文。

验证注解是否生效

Lombok 是编译期生成方法,所以验证要看两个地方:IDE 的类结构和编译产物。

在 IDEA 中查看类结构。如果一个类使用了 Lombok 注解,通过类结构(查看类中方法的视图)可以看到对应生成方法,比如toStringbuilder。能在这里看到方法,说明插件和依赖都工作正常。

反编译 target 目录下的 class 文件。打开target目录下编译出的.class文件,可以看到反编译后的字节码,方法确实存在。文档示例(@Getter / @Setter作用在CmowerLombok上)反编译结果如下:

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; } }

注意name字段只有@Getter,所以反编译结果里只有getName()而没有setName()——可以借此检查自己的注解是否按预期作用到了对应字段。

排查与限制

IDEA 中 getter/setter 无法编译或调用。先确认 IDEA 是否带有 Lombok 插件。2020.3 及以后版本内置;更旧的版本需要自行安装,否则编译不过。

团队成员使用 Eclipse。Eclipse 用户也必须安装 Lombok 插件,否则打开使用 Lombok 注解的项目会无法通过编译。团队内部要就"是否使用 Lombok"达成一致,有人用有人不用会破坏整体代码风格。

与 MyBatis 配合时的一个已知坑。@Data@Builder一起使用时,无参构造方法会丢失,需要主动声明无参构造并加@Tolerate注解告诉 Lombok 允许该构造方法存在,否则会导致 ORM 映射出错。MyBatis 整合一篇 中的实体类写法:

@Data @Builder public class User { private Integer id; private Integer age; private String name; private String password; @Tolerate User() {} }

团队能力匹配。文档提醒:如果团队成员有人不会使用 Lombok,需要考虑是否引入——不会用的人无法阅读 Lombok 生成的代码,会影响团队开发效率。

参考

  • Spring Boot 整合 Lombok:依赖坐标、注解用法、编译期处理流程
  • IDEA 神级插件推荐:Lombok 插件说明与依赖引入
  • Spring Boot 整合 Logback:@Slf4j的实际使用
  • Spring Boot 整合 MyBatis:@Data + @Builder + @Tolerate的实体类写法

【免费下载链接】toBeBetterJavaer一份通俗易懂、风趣幽默的Java学习指南,内容涵盖Java基础、Java并发编程、Java虚拟机、Java企业级开发、Java面试等核心知识点。学Java,就认准二哥的Java进阶之路😄项目地址: https://gitcode.com/GitHub_Trending/to/toBeBetterJavaer

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询