news 2026/6/9 18:41:52

关于lombok的全量认识与使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
关于lombok的全量认识与使用

Lombok 是一个 Java 库,它通过注解在编译期自动生成常见的样板代码(如 getter、setter、构造函数等),从而简化开发、减少冗余代码。在 Spring Boot 项目中使用 Lombok 非常常见。以下分两部分回答你的问题:


1. Spring Boot 项目如何引入 Lombok?需要注意什么?

引入方式(Maven)

pom.xml中添加 Lombok 依赖:

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional><!-- 推荐设为 true,避免传递依赖 --></dependency>

Spring Boot 官方 starter 已包含 Lombok 的兼容版本,所以通常无需指定<version>

注意事项
  • IDE 插件支持:必须在 IDE(如 IntelliJ IDEA 或 Eclipse)中安装 Lombok 插件,否则 IDE 无法识别生成的代码,会出现编译错误或找不到方法的提示。

    • IDEA:在 Settings → Plugins 中搜索 “Lombok” 并安装,重启后启用注解处理器(Enable annotation processing)。
    • Eclipse:需额外下载 lombok.jar 并运行安装。
  • 编译器兼容性:确保使用的 Java 版本与 Lombok 版本兼容(如 JDK 17 需 Lombok 1.18.22+)。

  • 不要在生产依赖中传递 Lombok:使用<optional>true</optional>provided范围,因为 Lombok 仅在编译期起作用,运行时不需要。

  • 避免与手动编写的 getter/setter 冲突:如果类中已有某 getter,Lombok 不会再生成,但要注意逻辑一致性。

  • 序列化/反序列化场景:某些框架(如 Jackson)依赖无参构造函数,若只用@AllArgsConstructor,需额外加@NoArgsConstructor


2. Lombok 提供了哪些常用机制(注解)?

以下是开发中最常用的 Lombok 注解:

注解作用
@Getter/@Setter自动生成字段的 getter/setter 方法
@ToString自动生成toString()方法(可排除敏感字段)
@EqualsAndHashCode自动生成equals()hashCode()
@NoArgsConstructor生成无参构造函数
@AllArgsConstructor生成包含所有字段的构造函数
@RequiredArgsConstructorfinal@NonNull字段生成构造函数
@Data组合注解:相当于@Getter+@Setter+@ToString+@EqualsAndHashCode+@RequiredArgsConstructor
@Builder提供建造者模式(Builder Pattern)支持,用于链式构建对象
@Slf4j/@Log4j2自动生成日志对象,如private static final Logger log = LoggerFactory.getLogger(...)
@NonNull标记参数或字段非空,自动生成空值检查(抛出NullPointerException
@Value用于创建不可变类(所有字段 private final +@Getter+@ToString+@EqualsAndHashCode+@AllArgsConstructor
@SneakyThrows允许不声明或捕获受检异常(慎用)
示例(结合 Spring Boot 常用实体类)
importlombok.Data;importlombok.NoArgsConstructor;importlombok.AllArgsConstructor;@Data@NoArgsConstructor@AllArgsConstructorpublicclassUser{privateLongid;privateStringname;privateStringemail;}

等价于手写 getter、setter、toString、equals、hashCode 和两个构造函数。


总结

  • Lombok 极大简化 Java Bean 编写,提升开发效率。
  • 在 Spring Boot 中引入简单,但需配置 IDE 插件。
  • 常用注解如@Data,@Builder,@Slf4j能覆盖大部分开发场景。
  • 注意构造函数、序列化、日志等场景的兼容性细节。

如果你有具体使用场景(如与 JPA、MyBatis、Jackson 集成),也可以进一步说明,我可以给出针对性建议。

更详细的说明:


1.@Getter/@Setter

作用:为字段自动生成 getter 和 setter 方法。

importlombok.Getter;importlombok.Setter;@Getter@SetterpublicclassPerson{privateStringname;privateintage;}

等价于手写:

publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}

2.@ToString

作用:自动生成toString()方法。

importlombok.ToString;@ToStringpublicclassBook{privateStringtitle;privateStringauthor;}

使用:

Bookbook=newBook();book.setTitle("Java核心技术");book.setAuthor("Cay Horstmann");System.out.println(book);// 输出:Book(title=Java核心技术, author=Cay Horstmann)

可加@ToString(exclude = "author")排除敏感字段。


3.@EqualsAndHashCode

作用:基于字段生成equals()hashCode()

importlombok.EqualsAndHashCode;@EqualsAndHashCodepublicclassPoint{privateintx;privateinty;}

测试:

Pointp1=newPoint();p1.x=1;p1.y=2;Pointp2=newPoint();p2.x=1;p2.y=2;System.out.println(p1.equals(p2));// true

4.@NoArgsConstructor

作用:生成无参构造函数。

importlombok.NoArgsConstructor;@NoArgsConstructorpublicclassCar{privateStringbrand;// 有无参构造:new Car() 可用}

5.@AllArgsConstructor

作用:为所有字段生成全参构造函数。

importlombok.AllArgsConstructor;@AllArgsConstructorpublicclassCar{privateStringbrand;privateintprice;}

使用:

Carcar=newCar("Tesla",300000);

6.@RequiredArgsConstructor

作用:为final字段或标记了@NonNull的字段生成构造函数。

importlombok.RequiredArgsConstructor;importlombok.NonNull;@RequiredArgsConstructorpublicclassStudent{privatefinalStringid;// final → 必须初始化@NonNullprivateStringname;// @NonNull → 必须初始化privateintage;// 普通字段,不参与构造}

使用:

Students=newStudent("S001","Alice");// 只需传 id 和 name

7.@Data

作用最常用!自动组合@Getter,@Setter,@ToString,@EqualsAndHashCode,@RequiredArgsConstructor

importlombok.Data;@DatapublicclassProduct{privateLongid;privateStringname;privatedoubleprice;}

你立刻可以:

  • 调用product.getName()
  • product.setName("Phone")
  • System.out.println(product)
  • equals()比较两个 Product
  • new Product(id, name, price)(如果字段非 final 则无参构造也存在?⚠️注意:@Data不生成无参构造,除非你额外加@NoArgsConstructor

⚠️ 注意:@Data不会生成无参构造函数!如需无参构造(比如用于 Jackson 反序列化),要手动加@NoArgsConstructor


8.@Builder

作用:提供建造者模式,支持链式调用创建对象。

importlombok.Builder;@BuilderpublicclassUser{privateStringusername;privateStringemail;privateintage;}

使用:

Useruser=User.builder().username("john").email("john@example.com").age(30).build();

9.@Slf4j

作用:自动生成 SLF4J 日志对象(Spring Boot 默认日志框架)。

importlombok.extern.slf4j.Slf4j;@Slf4jpublicclassOrderService{publicvoidplaceOrder(){log.info("订单已创建");log.warn("库存不足警告");}}

等价于手动写:

privatestaticfinalorg.slf4j.Loggerlog=org.slf4j.LoggerFactory.getLogger(OrderService.class);

类似还有:@Log4j2(Log4j 2)、@Log(java.util.logging)等。


10.@NonNull

作用:在方法参数或字段上标记非空,Lombok 会自动生成空检查(抛NullPointerException)。

importlombok.NonNull;publicclassMessageService{publicvoidsendMessage(@NonNullStringmessage){// Lombok 自动插入:if (message == null) throw new NullPointerException("message is marked non-null but is null");System.out.println("发送消息: "+message);}}

调用sendMessage(null)会立即抛出异常。


11.@Value

作用:创建不可变类(immutable class),所有字段默认private final,并带@Getter@ToString@EqualsAndHashCode、全参构造。

importlombok.Value;@ValuepublicclassCoordinate{intx;inty;}

等价于:

publicfinalclassCoordinate{privatefinalintx;privatefinalinty;publicCoordinate(intx,inty){this.x=x;this.y=y;}publicintgetX(){returnx;}publicintgetY(){returny;}// + toString, equals, hashCode}

注意:@Value类不能被继承(final),也不能修改字段值。


12.@SneakyThrows

作用:偷偷抛出受检异常(Checked Exception),无需在方法上声明throws

importlombok.SneakyThrows;importjava.io.IOException;publicclassFileManager{@SneakyThrowspublicvoidreadFile(){thrownewIOException("文件读取失败");// 不需要 try-catch 或 throws}}

⚠️ 慎用!破坏了 Java 异常检查机制,仅在明确知道后果时使用(如测试、工具类)。


补充建议(Spring Boot 中)

  • 实体类(Entity):通常用@Data+@NoArgsConstructor(JPA 要求无参构造)
  • DTO/VO:常用@Data@Builder
  • 日志:直接用@Slf4j
  • 不可变配置对象:用@Value
  • 构造注入:可用@RequiredArgsConstructor+@NonNull实现简洁注入

希望这些例子能帮你快速上手 Lombok!如果需要整合到 JPA、MyBatis 或 Jackson 的具体场景,也可以继续问我。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 18:39:08

E-Hentai-Downloader:轻松下载图片资源的强大工具

E-Hentai-Downloader&#xff1a;轻松下载图片资源的强大工具 【免费下载链接】E-Hentai-Downloader Download E-Hentai archive as zip file 项目地址: https://gitcode.com/gh_mirrors/eh/E-Hentai-Downloader E-Hentai-Downloader 是一个专门用于从特定网站下载图片资…

作者头像 李华
网站建设 2026/6/9 18:38:28

Dify如何组织复杂的知识点讲解顺序?

Dify如何组织复杂的知识点讲解顺序&#xff1f; 在AI应用开发日益普及的今天&#xff0c;一个普遍的挑战浮出水面&#xff1a;如何让非技术背景的产品经理、运营人员甚至初学者&#xff0c;也能清晰理解一个由大模型驱动的智能系统是如何工作的&#xff1f;更进一步&#xff0c…

作者头像 李华
网站建设 2026/6/5 15:18:06

MOSFET栅极电压作用机制通俗解释

深入理解MOSFET栅极电压&#xff1a;它是如何“无中生有”地控制电流的&#xff1f;你有没有想过&#xff0c;一个小小的电压信号&#xff0c;是如何在不直接参与电流流动的情况下&#xff0c;精准地“指挥”几安培甚至几十安培的大电流通断的&#xff1f;这听起来像魔法&#…

作者头像 李华
网站建设 2026/6/5 21:23:08

PotPlayer字幕翻译插件配置:3步轻松搞定外语视频观看

还在为看不懂外语视频的字幕而烦恼吗&#xff1f;PotPlayer字幕翻译插件让你轻松解决这一难题。通过翻译API&#xff0c;这款插件能够实时翻译视频字幕&#xff0c;支持多种语言互译&#xff0c;让外语视频观看变得简单愉快。本文将手把手教你如何配置这款实用的字幕翻译工具。…

作者头像 李华
网站建设 2026/6/9 18:38:31

Dify在十四行诗创作中的艺术成就评述

Dify在十四行诗创作中的艺术成就评述 在数字人文与人工智能交汇的今天&#xff0c;诗歌——这一曾被视为人类灵魂独白的语言艺术高地&#xff0c;正悄然迎来一场静默而深刻的变革。当“算法能否写诗”不再是一个哲学设问&#xff0c;而是可被调试、编排甚至优化的技术命题时&am…

作者头像 李华
网站建设 2026/6/5 20:36:15

Colorama 使用教程

&#x1f525;作者简介&#xff1a; 一个平凡而乐于分享的小比特&#xff0c;中南民族大学通信工程专业研究生&#xff0c;研究方向无线联邦学习 &#x1f3ac;擅长领域&#xff1a;驱动开发&#xff0c;嵌入式软件开发&#xff0c;BSP开发 ❄️作者主页&#xff1a;一个平凡而…

作者头像 李华