lombok 通过编译时注解处理器在字节码层面注入 getter 和 setter 方法,无需手动编写样板代码。只需在类上添加 @data 或在字段上添加 @getter 和 @setter,并在项目中引入 lombok 依赖即可实现。

如何配置 Maven 依赖与插件
要在 Java 项目中启用 Lombok,必须在构建工具中声明依赖并配置注解处理器。对于使用 Maven 的项目,需要在 pom.xml 文件中添加 lombok 依赖,并确保 maven-compiler-plugin 正确配置了 annotationProcessorPaths,以便编译器在编译阶段识别并处理这些注解。

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
上述配置将 Lombok 的依赖范围设置为 provided,因为它仅在编译时需要,运行时由 JVM 加载。配合 IDE 中的 Lombok 插件,开发者可以在编辑时看到生成的方法提示,而实际生成的字节码中包含了这些方法。
立即学习“Java免费学习笔记(深入)”;
常用注解的使用场景与区别
Lombok 提供了多种注解来生成访问器方法,最常用的是 @Data、@Getter 和 @Setter。@Data 是一个组合注解,它会自动为类添加 @Getter、@Setter、@ToString、@EqualsAndHashCode 和 @RequiredArgsConstructor。如果只需要生成 getter 和 setter,可以单独使用 @Getter 和 @Setter,或者将它们直接放在字段上以控制粒度。

import lombok.Data;
import lombok.Getter;
import lombok.Setter;
@Data
public class User {
private String name;
@Getter(AccessLevel.PROTECTED)
private int age;
private String email;
}
在上面的示例中,User 类使用了 @Data,因此 name 和 email 字段会自动生成公共的 getter 和 setter 方法。而 age 字段由于单独指定了 @Getter(AccessLevel.PROTECTED),其 getter 方法将是受保护的,setter 方法则遵循 @Data 的默认公共访问级别。这种细粒度的控制允许开发者根据封装需求调整方法的可见性。
当字段被 final 修饰时 getter setter 的行为
当 Lombok 处理的字段被声明为 final 时,行为会发生显著变化。Lombok 不会为 final 字段生成 setter 方法,因为 final 关键字要求字段只能在构造函数中初始化一次,之后不可修改。此时,Lombok 会生成一个包含该字段的构造函数(如果是 @Data 或 @RequiredArgsConstructor),但仅生成 getter 方法。
import lombok.Data;
@Data
public class Config {
private final String host;
private String port;
}
在上述 Config 类中,host 是 final 的,因此只会生成 getHost() 方法,而不会有 setHost()。相反,port 不是 final 的,所以会同时生成 getPort() 和 setPort() 方法。这种机制确保了不可变字段的线程安全性和语义正确性,开发者在使用时必须通过构造函数或静态工厂方法来初始化 final 字段。


















