java中Lombok的实现示例

 更新时间:2025年10月21日 11:18:37   作者:我是天龙_绍  
本文主要介绍了java中Lombok的实现示例,Lombok通过注解自动生成Java类的常用方法,如getter、setter、构造函数等,显著减少重复模板代码,使代码简洁易维护,感兴趣的可以了解一下

Lombok 的核心思想是:通过注解来消除 Java 中的冗长代码,让代码更加简洁、清晰和易于维护。

它通过在编译时自动生成这些代码的字节码(比如 getter、setter、构造函数等),让你在源代码中无需手动编写它们。

它解决了什么问题?

在标准的 Java 开发中,我们经常需要为类的属性编写大量重复、模板化的代码,例如:

  1. Getter 和 Setter 方法:为每个私有字段生成 getXxx() 和 setXxx() 方法。
  2. 构造函数:无参构造、全参构造等。
  3. equals()hashCode() 和 toString() 方法。
  4. 日志记录器:每次都要声明 private static final Logger log = ...

这些代码本身没有业务逻辑,但又必须存在,导致:

  • 源代码冗长:一个简单的 POJO 类可能就有上百行代码。
  • 不易维护:如果增加或修改一个字段,你需要手动修改对应的 getter、setter、equalshashCodetoString 等方法,很容易出错。

Lombok 是如何工作的?

Lombok 是一个 Java 编译时注解处理器。它的工作流程如下:

  1. 你编写代码:在 Java 类上使用 Lombok 注解(如 @Data)。
  2. 编译器调用 Lombok:当你使用 javac(或 IDE 内置的编译功能)编译代码时,编译器会检测到 Lombok 注解。
  3. Lombok 修改 AST:Lombok 会介入编译过程,修改 Java 编译器的抽象语法树(AST) ,将注解对应的代码(如 getter 方法)的字节码“注入”到正在编译的类中。
  4. 生成最终的 .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?

  1. 添加依赖:在项目的构建工具中加入 Lombok 依赖。

    • Maven:
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.30</version> <!-- 使用最新版本 -->
        <scope>provided</scope>
    </dependency>
    
    • Gradle:
      1. 安装 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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java中this的n种使用方法

    java中this的n种使用方法

    this可能是几乎所有有一点面向对象思想的语言都会引用到的变量,this有多少种用法。下面小编给大家带来了java中this的n种使用方法,感兴趣的朋友一起看看吧
    2018-08-08
  • SpringTask快速入门最佳实践记录

    SpringTask快速入门最佳实践记录

    Spring Task是Spring框架自带的任务调度工具,基于JDK 的ScheduledExecutorService实现,提供了注解驱动的定时任务配置方式,今天这篇文章,我们就来全面学习Spring Task的使用方法和进阶技巧,感兴趣的朋友一起看看吧
    2025-08-08
  • java检查服务器的连通两种方法代码分享

    java检查服务器的连通两种方法代码分享

    这篇文章主要介绍了java检查服务器的连通两种方法代码分享,涉及ping的介绍以及检查服务器连通的两种方法代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Spring如何通过@Lazy注解解决构造方法循环依赖问题

    Spring如何通过@Lazy注解解决构造方法循环依赖问题

    循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环,这篇文章主要给大家介绍了关于Spring如何通过@Lazy注解解决构造方法循环依赖问题的相关资料,需要的朋友可以参考下
    2023-03-03
  • 基于Java实现修改图片分辨率示例代码

    基于Java实现修改图片分辨率示例代码

    这篇文章主要介绍了一个可以修改图片分辨率的java工具类,文中的示例代码讲解详细,对学习JAVA有一定的帮助,感兴趣的小伙伴快来跟随小编一起学习吧
    2021-12-12
  • 基于maven的ssm框架整合的示例代码

    基于maven的ssm框架整合的示例代码

    本篇文章主要介绍了基于maven的ssm框架整合的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Session和JWT的区别是什么以及与Cookie相比详解

    Session和JWT的区别是什么以及与Cookie相比详解

    Web应用需客户端存储用户信息,Cookie是早期方案,有特点及验证方式,下面这篇文章主要介绍了Session和JWT的区别是什么以及与Cookie相比的相关资料,文中通过代码就介绍的非常详细,需要的朋友可以参考下
    2026-04-04
  • Java针对ArrayList自定义排序的2种实现方法

    Java针对ArrayList自定义排序的2种实现方法

    这篇文章主要介绍了Java针对ArrayList自定义排序的2种实现方法,结合实例形式总结分析了Java操作ArrayList自定义排序的原理与相关实现技巧,需要的朋友可以参考下
    2018-01-01
  • Spring bean注册到容器的总结

    Spring bean注册到容器的总结

    这篇文章主要介绍了Spring bean注册到容器的总结,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • 详解Java中跳跃表的原理和实现

    详解Java中跳跃表的原理和实现

    跳跃表(Skip list)是有序链表的扩展,简称跳表,它在原有的有序链表上增加了多级索引,通过索引来实现快速查找,实质上是一种可以进行二分查找的有序链表。本文主要为大家介绍了跳跃表的原理和实现,需要的可以参考一下
    2022-12-12

最新评论