Java:Lombok 完整讲解

一、Lombok 是什么

Lombok 是一款 Java 代码简化工具库 ,核心作用:通过注解自动生成重复模板代码,不用手动写 get/set、构造器、toString、equals、hashCode 等

Java 原生写实体类(POJO/Entity)会大量重复样板代码: getter、setter、无参构造、全参构造、toString、equals、hashCode,代码冗余、修改字段要同步改一堆方法。 Lombok 在编译阶段自动帮你生成这些字节码,源码里看不到,运行效果和手写完全一致。

二、使用前提(两步配置)

1. Maven 引入依赖

复制代码
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version>
    <scope>provided</scope>
</dependency>

provided:只编译时生效,打包不会打入 jar。

2. IDEA 必须装 Lombok 插件

IDEA 不装插件会报红(找不到 get/set 方法):

  1. File → Settings → Plugins

  2. 搜索 Lombok,安装重启 IDEA

  3. 开启注解处理:Settings → Build → Compiler → Annotation Processors → Enable annotation processing

三、最常用核心注解(开发高频)

1. @Data(实体类万能注解)

等价同时拥有:@Getter + @Setter + @ToString + @EqualsAndHashCode + @NoArgsConstructor 示例:

复制代码
import lombok.Data;

@Data
public class User {
    private Long id;
    private String username;
    private Integer age;
}

编译后自动生成: getId () /setId ()、toString ()、equals ()、hashCode ()、无参构造

2. @Getter / @Setter

单独给类 / 字段生成 get、set

复制代码
@Getter
@Setter
public class User {
    private Long id;
    // 此字段不生成set
    @Getter
    private String name;
}

3. @NoArgsConstructor / @AllArgsConstructor

  • @NoArgsConstructor:无参构造(Mybatis、反射框架必备)

  • @AllArgsConstructor:全字段参数构造器

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class User {
    private Long id;
    private String name;
    }

4. @Builder(建造者模式,创建对象超方便)

链式创建对象,日常 DTO、VO 高频使用

复制代码
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor // Builder搭配无参+全参避免反射报错
public class User {
    private Long id;
    private String username;
}

// 使用
User user = User.builder()
        .id(1L)
        .username("张三")
        .build();

5. @Slf4j / @Log4j2(日志简化)

自动生成 log 日志对象,不用手动声明

复制代码
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
public class UserService {
    public void test() {
        log.info("用户操作日志");
    }
}

6. @NonNull

复制代码
public void setName(@NonNull String name) {
    this.name = name;
}

参数非空校验,为空直接抛空指针异常

7. @RequiredArgsConstructor

final 修饰的字段、@NonNull 字段生成构造器 Spring 依赖注入推荐:

复制代码
@Service
@RequiredArgsConstructor
public class UserService {
    private final UserMapper userMapper; // 自动注入
}

替代 @Autowired,代码更简洁。

四、优缺点

优点

  1. 大幅减少实体类冗余代码,清爽整洁

  2. 修改字段不用同步修改 get/set/toString,减少漏改 bug

  3. 内置日志、建造者、构造器注解,开发效率高

  4. 编译期生成代码,无运行时性能损耗

缺点 & 坑(重点避坑)

  1. toString/equals 循环引用问题 两个实体互相引用,@Data 生成 toString 会栈溢出;解决方案:@ToString.Exclude@EqualsAndHashCode.Exclude 排除关联字段。

  2. 升级 JDK、IDEA 后容易插件失效,注解报错

  3. 继承场景下 @EqualsAndHashCode 默认不包含父类字段,需手动开启 callSuper = true

    复制代码
    @Data
    @EqualsAndHashCode(callSuper = true)
    public class UserDTO extends BaseEntity {}
  4. 源码看不到实际方法,新手调试不直观

  5. 部分代码检测工具、代码审计会识别不到生成方法

五、适用场景

数据库实体 Entity、DTO、VO、Request/Response 请求对象

Service、Controller 日志打印

快速构建对象、构造注入 Bean

六、简单总结

Lombok 就是编译期代码生成工具,靠注解干掉 Java 重复样板代码,是 SpringBoot 项目标配工具,几乎所有后端开发都会使用。

相关推荐
Shadow(⊙o⊙)9 小时前
高并发内存池:Part-1——定长内存池
java·前端·javascript
国服第二切图仔9 小时前
17-config命令 - 配置管理系统
java·前端·javascript
架构源启18 小时前
文档接入与智能解析:基于 Spring AI 1.1.x 的多格式解析、版面理解与结构化抽取
java·人工智能·spring
大模型码小白1 天前
JAVA 集合框架进阶:List 与 Set 的深度解析与实战
java·开发语言·人工智能·windows·语言模型·list·ai编程
名字还没想好☜1 天前
Go 的 time.Ticker 陷阱:定时任务里被忽略的内存泄漏与正确关闭
java·数据库·golang·go·定时器
音符犹如代码1 天前
后端视角看 EventBus:发布订阅总线的原理、场景与用法
java·spring boot·guava
前端炒粉1 天前
手撕小汇总
java·前端·javascript
唐青枫1 天前
Java Kafka 实战指南:从 Topic、分区到 Spring Boot 可靠消息处理
java
脱胎换骨-军哥1 天前
C++零成本抽象理论深度拆解:现代C++如何在不牺牲性能的前提下提供高级语法封装
java·开发语言·c++