一、Lombok概述
以前的Java项目中,充斥着太多不友好的代码:POJO的getter/setter/toString/构造方法;打印日志;I/O流的关闭操作等等,这些代码既没有技术含量,又影响着代码的美观,Lombok应运而生。LomBok可以通过注解,帮助开发人员消除JAVA中尤其是POJO类中的冗长代码。
使用LomBok之前
使用LomBok之后
二、Lombok插件安装
如果IDEA版本在2020.3以上,不需要安装Lombok插件。如果IDEA版本在2020.3以下,需要安装Lombok插件,安装方法如下:
- 点击Flie->Setting->Plugins
- 搜索Lombok,安装
三、Lombok相关注解
普通maven项目Lombok依赖为:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.22</version> <scope>provided</scope> </dependency>
SpringBoot项目Lombok的引入方式为:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
3.1 @Setter和@Getter
作用:为类中的属性提供setter/getter方法
位置:类上方或属性上方,在属性上方则为属性生成setter/getter 方法,在类上方表示给该类下的所有属性生成setter/getter方法 属性:设置setter和getter访问权限
代码语言:javascript复制//给类下的所有属性添加Setter/Getter
@Setter
@Getter
public class User {
//给id属性添加Setter
@Setter
private Integer id;
//给username的setter方法设置私有权限
@Setter(AccessLevel.PRIVATE)
private String username;
//取消password的Getter方法
@Getter(AccessLevel.NONE)
private String password;
private static int age;
private final String address = null;
}
看一看该类的结构:
注:
- static修饰的变量不生成getter和setter方法
- final修饰的变量只生成getter方法
3.2 @ToString
作用:生成toString方法,默认情况下它会按顺序打印类名称以及每个字段。 位置:类上方 属性:exclude:取消某一个或多个变量在toString方法中的显示
经过测试确实没有显示
3.3 @EqualsAndHashCode,@NonNull
判断两个对象是否相等 在Java中,调用equals()可以判断两个对象是否相等。如果类不重写该方法,则判断两个引用是否指向同一个对象。 如何重写equals():
- 判断两个引用是否指向同一对象
- 判断引用是否为Null
- 判断两个对象的实际类型是否相等,此时需要调用canEqual()
- 判断两个对象的属性是否相等
而在Set中判断对象是否重复,在调用equals()之前,需要先调用hashCode()计算hash值。所以判断对象相等需要重写equals()、canEqual()、hashCode()三个方法。 @EqualsAndHashCode 作用:生成equals和hashCode、canEqual方法。用于比较两个类对象是否相同。 位置:类上方 属性:exclude: 比较时排除一些属性,of: 比较时只使用一些属性
代码语言:javascript复制import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@ToString
//@EqualsAndHashCode(exclude = {"password"})
//排除password,只使用id,username对比及计算hash
@EqualsAndHashCode(of = {"username"})
//只使用username对比及计算hash
public class User3 {
private Integer id;
private String username;
private String password;
}
@NonNull
作用:用于方法参数前,表示调用该方法时参数不能为null;用于属性上方,表示为该属性赋值时值不能为null。 位置:方法参数前或属性上方。
3.4 @NoArgsConstructor,@RequiredArgsConstructor,@AllArgsConstructor
@NoArgsConstructor
作用:生成无参构造方法 位置:类上方 @RequiredArgsConstructor 作用:生成包含final和@NonNull修饰的属性的构造方法 位置:类上方 @AllArgsConstructor 作用:生成全参的构造方法 位置:类上方
3.5 @Data
作用:相当于同时添加@Setter、@Getter、@ToString、@EqualsAndHashCode、 @RequiredArgsConstructor五个注解 位置:类上方
3.6 @Builder
作用:提供链式风格创建对象 位置:类上方
示例代码:
代码语言:javascript复制// 同时提供@Setter、@Getter、@ToString、
@EqualsAndHashCode、@RequiredArgsConstructor
@Data
// 提供链式风格创建对象
@Builder
public class User6 {
@NonNull
private Integer id;
private String username;
private String password;
}
// 测试
@Test
public void testUser() {
User6 user6 = User6.builder()
.id(1)
.username("itbaizhan")
.password("itbaizhan")
.build();
}
3.7 @Log
作用:在类中生成日志对象,在方法中可以直接使用 位置:类上方
注:针对不同的日志实现产品,有不同的日志注解,使用 @Log表示使用Java自带的日志功能,除了 @Log ,还可以使用@Log4j 、 @Log4j2 、 @Slf4j 等注解,来使用不同的日志产品。
3.8 @CleanUp
作用:自动关闭资源,如IO流对象。 位置:代码前方
3.9 @SneakyThrows
作用:对方法中异常进行捕捉并抛出 位置:方法上方
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!