@builder注解通过编译期生成静态内部builder类实现构建者模式,自动提供链式调用、build()方法及私有全参构造器;支持@builder.default设默认值、tobuilder派生、自定义类名与方法名等进阶控制。

Lombok 的 @Builder 注解通过编译时代码生成,自动实现构建者模式(Builder Pattern),无需手写冗长的 Builder 类和方法。它本质是利用注解处理器在编译阶段为类生成静态内部 Builder 类、私有构造器、以及链式调用的 setter 方法。
核心原理:编译期生成 Builder 结构
当你在类上加 @Builder,Lombok 会在编译后生成一个静态内部类 ClassName.Builder,包含:
- 与原类字段一一对应的私有属性(用于暂存构建参数)
- 每个字段对应一个返回
Builder自身的 fluent 方法(如name(String name)) - 一个
build()方法,调用私有全参构造器创建最终对象 - 一个私有的全参数构造器(接收所有字段,供
build()调用)
基础用法:直接加注解即可
只需在目标类上添加 @Builder,就能获得链式构建能力:
@Builder
public class User {
private String name;
private int age;
private String email;
}
使用方式:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
User user = User.builder()
.name("Alice")
.age(30)
.email("alice@example.com")
.build();
处理必填字段:配合 @Builder.Default 或构造器参数
默认所有字段都是可选的。若需强制某些字段必须设置,有几种方式:
- 用
@Builder.Default给字段设默认值,该字段在 Builder 中仍可被覆盖 - 结合
@RequiredArgsConstructor+final字段:Lombok 会为所有final或@NonNull字段生成必填参数的构造器,并在 Builder 的build()中校验 - 手动添加自定义校验逻辑(如重写
build()方法或在构造器中抛异常)
进阶控制:自定义 Builder 行为
可通过以下方式微调生成逻辑:
- 用
@Builder(builderMethodName = "newBuilder")修改 builder 工厂方法名 - 用
@Builder(builderClassName = "UserBuilder")指定内部 Builder 类名 - 用
@Builder(toBuilder = true)为原类添加toBuilder()方法,支持从已有对象派生新实例 - 对单个字段加
@Builder.ObtainVia(field = "xxx")控制其如何从原对象获取值(多用于 toBuilder 场景)
不复杂但容易忽略细节,关键是理解它不是运行时反射,而是编译期“写代码”,所以 IDE 需启用 annotation processing 才能正确识别生成的方法。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










