Lombok使用
source link: https://zhuanlan.zhihu.com/p/193963808
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Lombok使用
简单的说,Lombok
就是给你的主力机配上僚机,简化代码开发,把Java
变得更像Kotlin
或者Scala
那种改进的JVM语言。有了Lombok
可以省略掉很多像Getter
、Setter
重复的代码,更专注于业务上的开发,利于维护。
Lombok
的官网Project Lombok
Lombok
的原理大致看了下,是在编译生成AST之后,根据注解对AST进行修改,比如增加上Getter
、Setter
方法,然后用修改后的AST生成字节码。
工欲善其事必先利其器,先给IDEA装上Lombok
的插件
要知道的是Lombok
跟普通注解不同的是,它实际运行在了代码编译之后,而一般的自定义注解都是实际运行在运行时——一般通过反射获取到注解的内容,然后继续。
所以还要配置一下,把Enable annotation processing
选中
配置完成后,可以加入Lombok
的依赖了,以Maven
为例
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
顺便说一下,为了追求更快的依赖下载速度,可以把镜像配置为国内的服务器地址,比如我就配置为阿里云的镜像地址
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 ">
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
以一个最简单的POJO
为例
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private long id;
private String name;
private int age;
}
加上了这几个注解后,生成的实际User
为
可以看到自动帮助生成了两个构造函数和一系列Getter
、Setter
方法。
看看Lombok
支持的稳定特性
val / var
跟现代语言支持的声明变量方法一样,能自动识别类型
@NotNull
帮助检查是否是null,然后抛出异常
@Cleanup
自动清理资源,帮你调用close()
,跟Java7改进的try
其实一样
@Getter / @Setter
这个不用多说了吧
@ToString
帮助生成toString
,还有一些细节参数可供设置
@EqualsAndHashCode
帮助重写equals
和hashCode
@NoArgsConstructor / @RequiredArgsConstructor / @AllArgsConstructor
帮助生成构造函数
@Data
生成@ToString
@EqualsAndHashCode
@Getter
@RequiredArgsConstructor
以及非final
字段的@Setter
@Value
生成不可变类
@Builder
生成构造器模式的类(方法里返回this
,可以链式调用)
@SneakyThrows
捕获指定的异常,重新抛出一个Lombok.sneakyThrow
异常对象
@Synchronized
自动生成一个Lock
对象
@With
帮助生成一个克隆对象,还能指定修改的字段
@Getter(lazy=true)
生成一个lazy的字段
自动生成日志对象,还有@Slf4j
以及 @CommonsLog
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK