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 项目标配工具,几乎所有后端开发都会使用。

相关推荐
小羊没烦恼!3 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里3 天前
java中的继承和多态的区别
java
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕3 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖3 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时3 天前
01-06-A-JVM排查实战详解
java·jvm
vipxieliang3 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
ba_pi3 天前
mysql 查询所有表名并授权
java
ProcessOn官方账号3 天前
java函数式编程--入门基础
java·编程·函数式编程