news 2026/4/15 12:04:10

关于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/4/10 6:41:31

音乐解锁实战指南:一键解决加密音乐格式转换难题

音乐解锁实战指南&#xff1a;一键解决加密音乐格式转换难题 【免费下载链接】unlock-music-electron Unlock Music Project - Electron Edition 在Electron构建的桌面应用中解锁各种加密的音乐文件 项目地址: https://gitcode.com/gh_mirrors/un/unlock-music-electron …

作者头像 李华
网站建设 2026/4/11 21:21:14

15B小模型如何挑战千亿级性能?Apriel-1.5推理王来了

15B小模型如何挑战千亿级性能&#xff1f;Apriel-1.5推理王来了 【免费下载链接】Apriel-1.5-15b-Thinker 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/Apriel-1.5-15b-Thinker 导语&#xff1a;ServiceNow推出的150亿参数多模态推理模型Apriel-1.5-15b-Thin…

作者头像 李华
网站建设 2026/4/12 14:49:01

Dify在SEO标题生成中的关键词布局技巧

Dify在SEO标题生成中的关键词布局技巧 在内容为王的时代&#xff0c;一个网页能否被用户点击&#xff0c;往往取决于它的标题是否足够吸引人。而这个“吸引力”背后&#xff0c;其实是一场搜索引擎优化&#xff08;SEO&#xff09;与用户心理的双重博弈。传统的标题创作依赖编辑…

作者头像 李华
网站建设 2026/4/13 10:15:38

微信消息智能转发革命:wechat-forwarding 5分钟极速上手全攻略

在日常工作和生活中&#xff0c;我们经常需要在多个微信群之间同步重要信息&#xff0c;手动转发不仅耗时费力&#xff0c;还容易遗漏关键内容。今天介绍的 wechat-forwarding 开源工具&#xff0c;将彻底改变你的消息管理方式&#xff0c;实现微信群消息的智能自动转发。 【免…

作者头像 李华
网站建设 2026/4/12 23:09:28

Dify平台的古代语言风格模仿能力测试

Dify平台的古代语言风格模仿能力测试 在数字人文与AI技术交汇的今天&#xff0c;一个引人深思的问题浮现&#xff1a;机器能否真正“读懂”古文&#xff1f;更进一步——它是否能以古人之口吻言说&#xff0c;用《论语》的简练、唐诗的韵律、宋词的婉约来回应现代人的提问&…

作者头像 李华
网站建设 2026/4/12 17:42:33

Xenos终极DLL注入指南:快速掌握Windows进程注入技术

Xenos是一款专业的Windows动态链接库注入器&#xff0c;基于强大的Blackbone库构建&#xff0c;支持x86和x64架构进程注入操作。无论是安全研究、软件调试还是逆向工程&#xff0c;Xenos都能提供高效可靠的注入解决方案。 【免费下载链接】Xenos Windows dll injector 项目地…

作者头像 李华