Lombok深入
Lombok初步介绍
Lombok能干什么
Lombok 是一个 Java 库,它提供了一系列的注解和工具,可以帮助 Java 开发者简化代码,减少样板代码的编写,提高开发效率和代码质量。
使用场景
以下是 Lombok 的全部使用场景:
-
@Getter/@Setter:自动生成 Getter/Setter 方法。
-
@ToString:自动生成 toString 方法。
-
@EqualsAndHashCode:自动生成 equals 和 hashCode 方法。
-
@AllArgsConstructor:自动生成包含所有参数的构造函数。
-
@NoArgsConstructor:自动生成无参构造函数。
-
@RequiredArgsConstructor:自动生成包含必需参数的构造函数。
-
@Data:相当于同时使用了 @Getter/@Setter、@ToString、@EqualsAndHashCode 和 @AllArgsConstructor 注解。
-
@Builder:提供了一种流畅的 API,用于构建不可变的对象。
-
@Singular:在 @Builder 注解中使用,用于指定集合类型的参数。
-
@Log/@Log4j2/@Slf4j:自动生成日志记录器。
-
@NoArgsConstructor(force = true):自动生成无参构造函数,并强制为 final 类型的属性设置默认值。
-
@AllArgsConstructor(staticName = “of”):自动生成包含所有参数的构造函数,并提供一个静态的 of 方法来创建对象。
-
@Value:相当于 @Data 注解,但生成的类是不可变的。
-
@NonNull:用于标记方法参数、字段或局部变量,表示不能为空。
-
@Cleanup:自动关闭资源,如文件、数据库连接等。
-
@Getter(lazy = true):生成懒加载的 Getter 方法。
-
@Delegate:委托给另一个对象处理某些方法。
-
@Wither:生成带有指定属性更新的新对象。
-
@UtilityClass:生成一个 final 类,其中包含了一些静态的工具方法。
-
@FieldNameConstants:生成包含字段名称的常量。
-
@Experimental:标记一个实验性的注解。
总之,Lombok 提供了丰富的注解和工具,可以大大简化 Java 代码的编写,并提高代码的可读性和维护性。根据具体的项目需求和开发习惯,可以选择合适的注解和工具来使用。
注意事项
-
IDE 插件支持:虽然 Lombok 在项目依赖中已经包含了所有必需的类和方法,但需要配合相应的 IDE 插件才能正常工作,否则会出现无法识别注解、生成的方法无法调用等问题。
-
编译时注解处理器:Lombok 注解需要在编译时通过注解处理器生成代码,所以需要确保项目中包含相应的编译时注解处理器。
-
可读性和维护性:虽然 Lombok 可以大大简化代码,但需要在保证可读性和维护性的前提下使用。例如,可以使用 @Getter/@Setter 自动生成 Getter/Setter 方法,但需要注意属性的命名规范,避免出现重复或歧义的属性名称。
-
兼容性:Lombok 可能与某些第三方库或框架存在兼容性问题,需要注意版本号和相关配置,确保不会出现冲突或错误。
-
工具类:使用 @UtilityClass 注解生成的工具类是 final 类型的,无法被继承或扩展。如果需要在工具类中添加实例方法或属性,可以考虑使用 @NoArgsConstructor(access = AccessLevel.PRIVATE) 注解生成私有的无参构造函数。
-
版本更新:Lombok 更新比较频繁,需要及时关注版本更新和变更内容,以便及时升级或调整代码。
要如何使用
Lombok在IDEA中的所需插件
-
安装 Lombok 插件:在 IDEA 中打开插件市场(Marketplace),搜索 Lombok 并安装。
-
配置 Lombok Compiler:在 IDEA 的设置(Settings)中,选择 Build, Execution, Deployment > Compiler > Annotation Processors,勾选 Enable annotation processing,然后在右侧的 Processing 中选择 Configure Annotations,勾选 lombok,保存即可。
-
在项目中使用 Lombok 注解
Lombok在Eclipse中的所需插件
-
安装 Lombok 插件:Lombok 提供了一个名为 lombok.jar 的插件,可以在 Lombok 官网下载,下载后双击运行即可安装。安装完成后,将 lombok.jar 文件复制到 Eclipse 安装目录下的 dropins 目录中。
-
配置 Eclipse:打开 Eclipse 的安装目录,找到 eclipse.ini 文件,在文件最后添加以下内容:
-Xbootclasspath/a:lombok.jar -javaagent:lombok.jar然后保存文件并重新启动 Eclipse。
-
在项目中使用 Lombok 注解
使用方法
Jar包引入使用
Lombok 的官网 : https://projectlombok.org/
下载最新的 Lombok jar 文件。在官网的首页中,点击 “Download” 按钮,即可进入下载页面。
在下载页面中,你可以选择下载最新版本的 jar 文件或者其他历史版本的 jar 文件。
Maven引入使用
-
在 pom.xml 文件中添加 Lombok 依赖
在 pom.xml 文件的 dependencies 标签中添加以下内容:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> <scope>provided</scope> </dependency> -
确保已经在 IDE 中安装 Lombok 插件
-
在项目中使用 Lombok 注解
Lombok 的作用是在编译时自动生成 Java 代码,因此在运行时不需要 Lombok 的 jar 文件,所以将其作用域设置为 provided。
Gradle引入使用
-
在 build.gradle 文件中添加 Lombok 依赖
在 build.gradle 文件中添加以下内容:
dependencies { compileOnly 'org.projectlombok:lombok:1.18.20' annotationProcessor 'org.projectlombok:lombok:1.18.20' } -
确保已经在 IDE 中安装 Lombok 插件
-
在项目中使用 Lombok 注解
需要注意的是,Lombok 的作用是在编译时自动生成 Java 代码,因此在运行时不需要 Lombok 的 jar 文件。因此,将其作用域设置为
compileOnly,表示编译时需要 Lombok,但不需要在运行时使用。同时,还需要添加annotationProcessor依赖,用于处理 Lombok 注解。
Lombok 注解文档
Lombok 注解概览表
以下是常用的 Lombok 注解罗列成的表格,包括注解、注解使用范围、注解作用和注解使用注意事项:
| 注解 | 使用范围 | 作用 | 注意事项 |
|---|---|---|---|
| @Data | 类 | 生成所有属性的 Getter/Setter、equals、hashCode、toString 方法 | 注意避免循环引用 |
| @Getter/@Setter | 属性 | 生成 Getter/Setter 方法 | 注意避免属性名重复或歧义 |
| @NonNull | 参数、属性、方法 | 标记参数、属性、方法返回值不能为空 | 注意参数、属性、方法返回值不能为空 |
| @ToString | 类 | 生成 toString 方法 | 注意排除敏感信息 |
| @EqualsAndHashCode | 类 | 生成 equals 和 hashCode 方法 | 注意排除敏感信息 |
| @NoArgsConstructor | 类 | 生成无参构造函数 | 注意根据需要使用不同的构造函数 |
| @RequiredArgsConstructor | 类 | 生成必需参数构造函数 | 注意根据需要使用不同的构造函数 |
| @AllArgsConstructor | 类 | 生成所有参数构造函数 | 注意根据需要使用不同的构造函数 |
| @Builder | 类、方法 | 生成建造者模式的构建器 | 注意使用时需要使用 @NoArgsConstructor 或 @AllArgsConstructor 生成构造函数 |
| @Log | 类、属性、方法 | 自动生成 Logger 对象 | 注意需要在类路径中添加相应的 Log4j 或其他日志库依赖 |
| @UtilityClass | 类 | 生成工具类 | 注意生成的工具类是 final 类型,无法被继承或扩展 |
注意事项是使用 Lombok 注解时需要特别注意的地方,使用时需要根据具体情况进行调整和补充。
常用Lombok注解实例详解
@Data
- @Data注解源码
@Target({
ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
public @interface Data {
String staticConstructor() default "";
}
@Data作用域
-
@Data注解作用于类上,由 @Target({ElementType.TYPE}) 限定
-
注解仅存在于源码中,在class字节码文件中不包含,由 @Retention(RetentionPolicy.SOURCE) 标记生效
@Data作用
- @Data为类提供get/set方法以及canEqual、equals、hashCode、toString方法:
@Data
public class Car {
}
- 测试实例,现有一类Car,不包含任何属性,通过@Data注解标记后观察其编译输出class文件(见下方),可以看到Lombok为该类生成了canEqual、equals、hashCode、toString方法
public class Car {
public Car() {
}
public boolean equals(Object o) {
if (o == this) {
return true;
} else if (!(o instanceof Car)) {
return false;
} else {
Car other = (Car)o;
return other.canEqual(this);
}
}
protected boolean canEqual(Object other) {
return other instanceof Car;
}
public int hashCode() {
int result = true;
return 1;
}
public String toString() {
return "Car()";
}
}
@Data
public class Car {
private String name;
private String color;
}
@Data属性
staticConstructor 为类生成静态构造方法
- String staticConstructor() default “”;
- 查看源码发现包含一个属性staticConstructor,其作用为为类生成静态构造方法
- 测试实例,在类的@Data中staticConstructor属性添加对应String类型命名,即为静态构造方法的命名
//源类
@Data(staticConstructor = "create")
public class Car {
}
//编译后class中包含静态构造方法,方法名以@Data的staticConstructor属性值命名
public static Car create() {
return new Car();
}
- 使用时
Car car = Car.create();
@Data注意事项
- @Data相当于@Getter @Setter @RequiredArgsConst

Lombok是一个Java库,提供了一系列注解来简化代码,如@Data自动创建getter/setter、equals、hashCode和toString。文章详细介绍了Lombok的使用场景,包括IDEA和Eclipse的插件配置,以及Maven和Gradle的引入方法。还探讨了常用注解如@Data、@EqualsAndHashCode、@ToString、@Getter/@Setter的用法和注意事项。
1万+

被折叠的 条评论
为什么被折叠?



