Appearance
2026-08-27 · 用注解自动生成 getter/setter/构造方法等模板代码——告别手写样板。
Lombok 快速上手
1. Lombok 解决什么问题
传统写法的痛点:
java
public class Student {
private String name;
private int age;
private String email;
// 一个类要写一堆 getter/setter/构造方法/toString...
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
public Student() {}
public Student(String name, int age, String email) { ... }
@Override public String toString() { ... }
@Override public boolean equals(Object o) { ... }
@Override public int hashCode() { ... }
// 写了 20 多行,实际什么逻辑都没有
}Lombok 写法:
java
@Data
public class Student {
private String name;
private int age;
private String email;
}
// 一行 @Data 替代上面全部(getter/setter/toString/equals/hashCode/无参构造)2. 安装
IDEA 插件
File → Settings → Plugins → 搜索 Lombok → Install → 重启 IDEA
Maven 依赖
pom.xml 加:
xml
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
scope=provided表示 Lombok 只在编译时用,不会打进 jar 包(它不是运行时依赖)。
3. 常用注解
@Data(最常用)
自动生成:getter、setter、toString、equals、hashCode、无参构造
java
@Data
public class Student {
private String name;
private int age;
}
// 自动生成:
// getName()、setName()、getAge()、setAge()
// toString()、equals()、hashCode()
// 无参构造方法@Getter / @Setter(只生成 getter 或 setter)
java
@Getter
@Setter
public class Student {
private String name; // 只有 getName(),没有 setName()
private int age; // 只有 getAge(),没有 setAge()
}想让某些字段只读(没有 setter),就单独加 @Getter。
@NoArgsConstructor / @AllArgsConstructor
java
@NoArgsConstructor // 生成无参构造
@AllArgsConstructor // 生成全参构造(所有字段)
@Data
public class Student {
private String name;
private int age;
}
// 使用
Student s1 = new Student(); // 无参构造
Student s2 = new Student("张三", 20); // 全参构造@ToString
java
@ToString
public class Student {
private String name;
private int age;
}
// 输出:Student(name=张三, age=20)@Slf4j(日志)
java
@Slf4j
public class UserService {
public void save() {
log.info("保存用户"); // 等价于 LoggerFactory.getLogger(...)
log.error("保存失败");
}
}@Slf4j 生成一个
log变量(基于 SLF4J + Logback),Spring Boot 项目里大量使用。
4. 组合使用
实际开发中常用组合:
java
// Spring Boot 实体类标准写法
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Long id;
private String name;
private String email;
}
// Service 类标准写法
@Slf4j
@Service
public class UserService {
public void save(User user) {
log.info("保存用户:{}", user.getName());
}
}Lombok 本质是编译时注解处理器,在编译阶段生成字节码,运行时没有额外开销。
5. 常见坑
java
// 坑1:@Data 会生成 equals,子类继承时可能有问题
// 解决:子类用 @EqualsAndHashCode(callSuper = true)
@Data
@EqualsAndHashCode(callSuper = true)
public class Admin extends User {
private String role;
}
// 坑2:@Data 生成的无参构造和 @AllArgsConstructor 冲突
// 解决:手动指定需要的构造方法,不用 @Data日常开发用 @Data 即可,遇到继承场景再加 @EqualsAndHashCode(callSuper = true)。