Java中Lombok工具库使用的技术指南
作者:拾荒的小海螺
1、简述
Lombok 是 Java 开发中常用的工具库,通过注解的方式大大简化了代码开发,尤其是在 Getter/Setter、构造方法、日志工具 等常见场景中,能够极大地减少样板代码 (boilerplate)。本篇文章将从基础入门到高级用法,深入讲解 Lombok 的使用技巧和注意事项。
2、什么是 Lombok
Lombok 是一个 Java 注解处理工具,主要通过 编译时注解 自动生成代码。开发者在代码中添加简短的注解,Lombok 就能自动为类生成常见方法,从而减少冗余代码,提高开发效率。
主要功能
- 自动生成 Getter/Setter。
 - 生成 equals、hashCode、toString。
 - 构造器的自动生成。
 - 支持 Builder 模式。
 - 集成日志工具。
 - 提供高级功能,如链式调用、自定义访问级别等。
 
2.1 Maven 依赖
在项目的 pom.xml 中引入 Lombok:
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version>
    <scope>provided</scope>
</dependency>
注意: provided 表示 Lombok 仅在编译时有效,运行时不需要依赖它。
2.2 IDE 配置
大部分 IDE(如 IntelliJ IDEA、Eclipse)都支持 Lombok,但需要安装插件:
IntelliJ IDEA: 在插件市场中搜索 Lombok 并安装。
Eclipse: 下载并安装 Lombok jar 文件,运行 java -jar lombok.jar 进行配置。
3、基础用法
3.1 自动生成 Getter 和 Setter
Lombok 的 @Getter 和 @Setter 注解会自动为类的字段生成 getXXX 和 setXXX 方法。
import lombok.Getter;
import lombok.Setter;
public class User {
    @Getter @Setter
    private String name;
    @Getter @Setter
    private int age;
}
使用后,编译器会自动生成以下代码:
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; }
3.2 构造器注解
- @NoArgsConstructor:生成无参构造器。
 - @AllArgsConstructor:生成包含所有字段的构造器。
 - @RequiredArgsConstructor:生成包含 final 字段的构造器。
 
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
public class User {
    private final String id;
    private String name;
    private int age;
}
3.3 @ToString 和 @EqualsAndHashCode
@ToString:生成 toString 方法,自动包含类中的字段。
@EqualsAndHashCode:生成 equals 和 hashCode 方法。
import lombok.EqualsAndHashCode;
import lombok.ToString;
@ToString
@EqualsAndHashCode
public class User {
    private String name;
    private int age;
}
3.4 @Data 注解
@Data 是一个组合注解,相当于以下 注解的合集:
- @Getter
 - @Setter
 - @ToString
 - @EqualsAndHashCode
 - @RequiredArgsConstructor
 
import lombok.Data;
@Data
public class User {
    private String name;
    private int age;
}
4、高级用法
4.1 Builder 模式
Lombok 提供了 @Builder 注解来自动生成 Builder 模式的代码,适用于需要构建复杂对象的场景。
import lombok.Builder;
import lombok.ToString;
@Builder
@ToString
public class User {
    private String name;
    private int age;
    private String address;
}
使用方式:
User user = User.builder()
               .name("John")
               .age(30)
               .address("New York")
               .build();
System.out.println(user);
4.2 日志注解
Lombok 提供了多种日志注解,自动为类注入对应的日志工具:
@Slf4j:注入 SLF4J 日志对象。
@Log4j2:注入 Log4j2 日志对象。
@CommonsLog:注入 Commons Logging 日志对象。
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class LoggingExample {
    public static void main(String[] args) {
        log.info("This is an info log.");
        log.error("This is an error log.");
    }
}
4.3 链式调用
通过 @Accessors(fluent = true, chain = true),可以生成链式调用的 Setter 方法。
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
@Getter
@Setter
@Accessors(chain = true)
public class User {
    private String name;
    private int age;
}
使用方式:
User user = new User().setName("John").setAge(30);
System.out.println(user.getName());
4.4 自定义 Getter 和 Setter 的访问级别
可以通过 @Getter 和 @Setter 的 AccessLevel 属性设置访问级别(如 PUBLIC、PRIVATE)。
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
public class User {
    @Getter
    @Setter(AccessLevel.PRIVATE)
    private String name;
}
4.5 @Value:不可变对象
@Value 注解会将类标记为不可变对象,相当于:
- 所有字段为 private final。
 - 类为 final。
 - 自动生成 Getter。
 
import lombok.Value;
@Value
public class ImmutableUser {
    String name;
    int age;
}
4.6 @SneakyThrows:异常处理
@SneakyThrows 注解会自动将受检异常(Checked Exception)包装为运行时异常。
import lombok.SneakyThrows;
public class SneakyThrowsExample {
    @SneakyThrows
    public void readFile() {
        throw new Exception("Checked Exception");
    }
}
4.7 实验性功能:@With
@With 注解可以用于生成 不可变对象的复制方法,用于替换某些字段。
import lombok.Value;
import lombok.With;
@Value
public class User {
    @With private String name;
    private int age;
}
使用方式:
User user1 = new User("John", 30);
User user2 = user1.withName("Doe");
System.out.println(user1); // User(name=John, age=30)
System.out.println(user2); // User(name=Doe, age=30)
5、总结
Lombok 是简化 Java 开发中样板代码的神器,其注解如 @Getter、@Setter、@Builder 等能显著提升编码效率。此外,像 @Value 和 @With 这样的高级功能,为构建不可变对象提供了便利。
在日常开发中,合理使用 Lombok,不仅能让代码更加简洁、优雅,也能提高团队的开发效率。不过,在一些需要明确代码逻辑的关键场景下,仍需谨慎使用,以避免可读性问题。
到此这篇关于Java中Lombok工具库使用的技术指南的文章就介绍到这了,更多相关Java Lombok库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
