Lombok简介
Lombok是一种可以通过使用注解来消除Java中的冗余代码的实用工具。通过Lombok的注解,开发人员可以不用再写getter、setter、equals等方法,Lombok将在编译时自动生成。
Lombok安装
1、Lombok的安装
1)安装Lombok
Preferences > Settings > Plugins > Browse repositories... > Search for "lombok" > Install
或者
Preferences > Plugins > Search for "lombok" > Install
2)启用Annotation Processors
Preferences > Settings > Build, Execution, Deployment > Compiler > Annotation Processors > 选中"Enable annotation processing"
或者
Preferences > Build, Execution, Deployment > Compiler > Annotation Processors > 选中"Enable annotation processing"
3)重启IDEA后,插件生效
2、IntelliJ Idea 2020.3版本已经默认集成了Lombok,不用再手动安装啦
Lombok使用
1、添加依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
SpringBoot 2.1.x版本后无需指定Lombok版本,SpringBoot在spring-boot-dependencies中已经内置
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
2、注解
Lombok中有很多注解,这些注解让我们可以更加方便的编写Java代码,常用注解如下:
1)@Getter、@Setter
这两个注解如果作用于类上,会生成所有成员变量的getter/setter方法,如果作用于成员变量上,会生成该成员变量的getter/setter方法,可以设定访问权限及是否懒加载等。之前即使我们使用IDEA自动生成getter/setter方法,如果类属性的类型和名称改了,又要重新生成或者挨个修改getter/setter方法也是一件很麻烦的事情。
2)@ToString
把所有类属性都编写到toString方法中方便打印日志,当我们新增/修改类属性时,还需要再去维护这个方法的实现,是一件比较麻烦的事情。使用@ToString注解可以自动生成toString方法,默认会包含所有类属性,使用@ToString.Exclude注解可以排除属性的生成。
3)@EqualsAndHashCode
使用@EqualsAndHashCode注解可以自动生成equals和hashCode方法,默认包含所有类属性,使用@EqualsAndHashCode.Exclude可以排除属性的生成。
4)@NonNull
主要作用于成员变量和参数中,做非空判断,如果传入空值会直接抛出异常NullPointerException。
5)@NoArgsConstructor、@RequiredArgsConstructor、@AllArgsConstructor
这三个注解作用于类上,用于生成构造函数,有staticName、access等属性,staticName属性一旦设定,将采用静态方法的方式生成实例,access属性可以限定访问权限。
@NoArgsConstructor:生成无参数构造函数
@RequiredArgsConstructor:生成包含final和@NonNull注解的成员变量的构造函数
@AllArgsConstructor:生成包含所有参数的构造函数
6)@Data
作用于类上,是以下注解的集合:@ToString、@EqualsAndHashCode、@Getter、@Setter、@RequiredArgsConstructor
7)@Builder
作用于类上,将类转变为建造者模式,建造者模式加链式调用,创建对象非常方便
8)@Log
作用于类上,生成日志变量,针对不同的日志实现产品,有不同的注解,如@Log、@Log4j、@Log4j2、@Slf4j等
9)使用注解的示例如下:
@Data
@Builder
@TableName(value = "article")
public class ArticlePo {
@TableId(type = IdType.AUTO)
private Integer id;
private String articleId;
private String title;
}
不常使用注解如下:
1)@val
使用val注解可以取代任意类型作为局部变量,这样我们就不用写复杂的ArrayList和Map.Entry类型了,当我们使用了val注解后,Lombok会从局部变量的初始化表达式推断出具体类型。
2)@Value
使用@Value注解可以把类声明为不可变的,声明后此类相当于final类,无法被继承,其属性也会变成final属性。
3)@Cleanup
当我们在Java代码中使用资源时,需要在使用后关闭资源,使用@Cleanup注解可以自动关闭资源,这个注解针对实现了java.io.Closeable接口的对象有效,如:典型的IO流对象。
4)@SneakyThrows
可以对受检异常进行捕捉并抛出
5)@Synchronized
作用于方法级别,可以替换synchronize关键字或lock锁
6)@With
使用@With注解可以实现对原对象进行克隆,并改变其一个属性,使用时需要指定全参构造方法
Lombok优缺点
优点:帮助开发人员消除Java的冗长,节省开发人员的时间
缺点:污染了Javabean,团队中一人使用,其他人也要安装插件
Delombok工具
Delombok工具是Lombok出的一个神器,如果你想把Lombok注解都去掉,它可以让你使用一个命令就把Lombok注解实现的类文件转换为不使用Lombok的Java源文件。
若您觉得还可以,请帮忙点个赞,更多内容,请关注公众号“图南随笔”