Lombok 入门教程
1. 什么是 Lombok?
Lombok 是一个帮助简化 Java 类中样板代码的 Java 库。比如,你经常会发现自己重复编写 getter
和 setter
方法、构造函数、toString()
、equals()
和 hashCode()
方法等。Lombok 通过注解来自动生成这些代码,简化开发工作。
2. Lombok 安装步骤
2.1 使用 Maven 项目
如果你在使用 Maven,需要在 pom.xml
中添加 Lombok 依赖。步骤如下:
- 打开你的项目的
pom.xml
文件。 - 在
<dependencies>
部分中加入 Lombok 依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version> <!-- Lombok 最新版本号可在官网查找 -->
<scope>provided</scope>
</dependency>
- 保存文件后,Maven 会自动下载 Lombok 依赖。
2.2 使用 Gradle 项目
如果你使用 Gradle,则需要修改 build.gradle
文件:
- 打开你的项目的
build.gradle
文件。 - 在
dependencies
部分添加 Lombok 依赖:
dependencies {
compileOnly 'org.projectlombok:lombok:1.18.24'
annotationProcessor 'org.projectlombok:lombok:1.18.24'
}
- 保存后,Gradle 会自动下载 Lombok 库。
2.3 配置 IDE
为了在开发工具中正确识别 Lombok 注解,你需要安装插件:
- IntelliJ IDEA:打开
File
>Settings
>Plugins
,然后搜索并安装 Lombok Plugin。安装后,启用Enable annotation processing
。 - Eclipse:通过 Eclipse Marketplace 搜索并安装 Lombok 插件。
3. Lombok 的常用注解
Lombok 主要通过注解来生成代码。以下是一些常见的 Lombok 注解及其用途。
3.1 @Getter
和 @Setter
- @Getter:自动生成 getter 方法。
- @Setter:自动生成 setter 方法。
示例:
import lombok.Getter;
import lombok.Setter;
public class User {
@Getter @Setter
private String name;
@Getter @Setter
private int age;
}
作用:上面的代码会自动生成 getName()
、setName()
、getAge()
和 setAge()
方法。无需手动编写 getter 和 setter 方法。
3.2 @ToString
- @ToString:自动生成
toString()
方法,返回对象的字符串表示。
示例:
import lombok.ToString;
@ToString
public class User {
private String name;
private int age;
}
作用:调用 System.out.println(user)
会打印 User(name=Alice, age=30)
这种格式。
3.3 @NoArgsConstructor
和 @AllArgsConstructor
- @NoArgsConstructor:生成无参构造函数。
- @AllArgsConstructor:生成包含所有字段的构造函数。
示例:
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
public class User {
private int id;
private String name;
}
作用:
@NoArgsConstructor
会生成User()
无参构造函数。@AllArgsConstructor
会生成User(int id, String name)
构造函数。
3.4 @Data
- @Data 是 Lombok 的综合注解,包含以下功能:
@Getter
和@Setter
@ToString
@EqualsAndHashCode
@RequiredArgsConstructor
示例:
import lombok.Data;
@Data
public class User {
private int id;
private String name;
}
作用:@Data
会自动为类生成所有字段的 getter、setter、toString()
、equals()
和 hashCode()
方法,以及必要的构造函数。
3.5 @Builder
- @Builder:为类生成 builder 模式,用于流式创建对象。
示例:
import lombok.Builder;
@Builder
public class User {
private String name;
private int age;
}
作用:你可以使用 builder 模式来创建对象:
User user = User.builder()
.name("Alice")
.age(30)
.build();
3.6 @Value
- @Value:用于创建不可变类。所有字段默认使用
final
,不生成 setter 方法。
示例:
import lombok.Value;
@Value
public class User {
private String name;
private int age;
}
作用:@Value
会生成不可变类,确保字段值不可更改。
3.7 @Slf4j
- @Slf4j:生成日志对象
log
,用于记录日志。
示例:
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class UserService {
public void createUser() {
log.info("Creating a new user...");
}
}
作用:@Slf4j
会生成 log
对象,可以直接使用 log.info()
来记录日志。
4. Lombok 注解的实际应用
4.1 使用 @Data
简化实体类
在传统的 Java 开发中,一个简单的实体类可能会包含很多样板代码,如 getter、setter、toString()
等。使用 Lombok 的 @Data
注解,可以大大简化这些类的代码。
示例:
import lombok.Data;
@Data
public class Product {
private int id;
private String name;
private double price;
}
效果:Lombok 会自动生成 Product
类的所有 getter
、setter
、toString()
、equals()
和 hashCode()
方法。
4.2 使用 @Builder
模式创建对象
假设你想创建一个包含多个字段的对象,使用传统的构造方法可能不够直观。Lombok 的 @Builder
注解可以帮助你更清晰地构建对象。
示例:
import lombok.Builder;
@Builder
public class Order {
private String productName;
private int quantity;
private double price;
}
效果:使用 builder
模式创建对象:
Order order = Order.builder()
.productName("Laptop")
.quantity(2)
.price(1500.00)
.build();
4.3 使用 @Slf4j
记录日志
开发中,日志记录是非常重要的,Lombok 提供了 @Slf4j
注解,自动生成一个 log
对象来方便记录日志。
示例:
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class PaymentService {
public void processPayment() {
log.info("Payment processed successfully.");
}
}
效果:你可以使用 log
对象的 info()
、debug()
、error()
方法记录日志。
5. 总结
Lombok 通过简洁的注解,帮助 Java 开发者减少样板代码,使代码更简洁易读。
- @Getter / @Setter:生成 getter 和 setter 方法。
- @ToString:生成
toString()
方法。 - @NoArgsConstructor / @AllArgsConstructor:生成构造函数。
- @Data:自动生成 getter、setter、
toString()
、equals()
、hashCode()
等方法。 - @Builder:生成 builder 模式。
- @Value:创建不可变类。
- @Slf4j:用于生成日志对象
log
。