一、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 方法):
-
File → Settings → Plugins
-
搜索 Lombok,安装重启 IDEA
-
开启注解处理: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,代码更简洁。
四、优缺点
优点
-
大幅减少实体类冗余代码,清爽整洁
-
修改字段不用同步修改 get/set/toString,减少漏改 bug
-
内置日志、建造者、构造器注解,开发效率高
-
编译期生成代码,无运行时性能损耗
缺点 & 坑(重点避坑)
-
toString/equals 循环引用问题 两个实体互相引用,@Data 生成 toString 会栈溢出;解决方案:
@ToString.Exclude、@EqualsAndHashCode.Exclude排除关联字段。 -
升级 JDK、IDEA 后容易插件失效,注解报错
-
继承场景下
@EqualsAndHashCode默认不包含父类字段,需手动开启callSuper = true@Data @EqualsAndHashCode(callSuper = true) public class UserDTO extends BaseEntity {} -
源码看不到实际方法,新手调试不直观
-
部分代码检测工具、代码审计会识别不到生成方法
五、适用场景
数据库实体 Entity、DTO、VO、Request/Response 请求对象
Service、Controller 日志打印
快速构建对象、构造注入 Bean
六、简单总结
Lombok 就是编译期代码生成工具,靠注解干掉 Java 重复样板代码,是 SpringBoot 项目标配工具,几乎所有后端开发都会使用。