Lombok通过在编译期借助注解处理器修改抽象语法树 AST,自动生成常用的样板方法(如getter/setter、toString、equals、hashCode、构造器等),使源码保持简洁,同时不影响运行时性能。它适用于POJO、DTO、Entity等对象建模场景,能显著减少重复代码、提升可维护性。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
Gradledependencies {
compileOnly 'org.projectlombok:lombok:1.18.30'
annotationProcessor 'org.projectlombok:lombok:1.18.30'
}
| 注解 | 主要作用 | 典型用法 | 等价手写要点 |
|---|---|---|---|
| @Getter / @Setter | 生成字段的 getter/setter | @Getter @Setter private String name; | 为每个字段生成 public String getName() / void setName(String) |
| @ToString | 生成 toString() | @ToString(exclude = “password”) | 拼接类名与字段值,可排除/指定字段 |
| @EqualsAndHashCode | 生成 equals/hashCode | @EqualsAndHashCode(callSuper = true) | 按非静态字段判等并生成哈希,可包含父类字段 |
| @NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor | 生成构造器 | @RequiredArgsConstructor | 无参;全参;仅 final/@NonNull 字段 |
| @Data | 组合注解 | @Data | 包含 @Getter/@Setter/@ToString/@EqualsAndHashCode/@RequiredArgsConstructor |
| @Value | 不可变对象 | @Value class Point { int x; int y; } | 字段默认 final,生成全参构造、getter、equals/hashCode、toString |
| @Builder | 建造者模式 | User.builder().name(“A”).age(18).build(); | 生成私有全参构造与内部 Builder,链式创建对象 |
| @Slf4j | 日志字段 | @Slf4j log.info(“msg”); | 生成 private static final Logger log = LoggerFactory.getLogger(…) |
| @SneakyThrows | 隐式抛出受检异常 | @SneakyThrows(IOException.class) | 编译器层面绕过 throws 声明 |
| @Cleanup | 自动关闭资源 | @Cleanup InputStream in = new FileInputStream(…); | 在作用域末尾自动调用 close() |
示例
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String name;
private int age;
}
@Slf4j
@Service
public class HelloService {
public void say() {
log.info("Hello, Lombok");
}
}
上述示例分别等价于手写 getter/setter/构造器/日志对象等模板代码,代码量大幅减少。
典型场景
最佳实践与注意
IDE 不识别 Lombok 注解
与 JPA 一起使用
替代方案
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。