一、lombok介绍
lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。
二、lombok安装
1、安装插件
2、引入依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.14.4</version>
</dependency>
三、lombok使用
在此您会觉得
lombok
插件的魔性,以往写model
时,必不可少的就是getter、setter
方法,当然可以使用IDE一键生成。但是能不能更懒一点,比如加一个注解,编译时帮我自动加上这些属性的getter、setter
方法呢。毋容置疑,当然可以。
@Table(name="job_worker_config")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@NameStyle(Style.normal)
public class JobWorkerConfig extends GenericModel {
private String jobWorkerHostname;
private String consumerId;
private String topic;
private String tag;
private String jobInstanceName;
private Integer consumerThreadNum;
}
以上就是一个model的定义,代码非常简洁,其中@Setter、@Getter
就是编译时注解,编译时自动帮加上getter、setter方法。
四、lombok注解
- @Data :注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
- @Setter :注解在属性上;为属性提供 setting 方法
- @Setter :注解在属性上;为属性提供 getting 方法
- @Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
- @NoArgsConstructor :注解在类上;为类提供一个无参的构造方法
- @AllArgsConstructor :注解在类上;为类提供一个全参的构造方法
- @Cleanup : 可以关闭流
- @Builder : 被注解的类加个构造者模式
- @Synchronized : 加个同步锁
- @SneakyThrows : 等同于try/catch 捕获异常
- @NonNull : 如果给参数加个这个注解 参数为null会抛出空指针异常
- @Value : 注解和@Data类似,区别在于它会把所有成员变量默认定义为private final修饰,并且不会生成set方法。
- @Slf4j : 日志注解。此注解很常用,下一篇博客作详细讲解。
以上注解的使用都比较简单,基本和@Setter、@Getter使用方式相同,下面只介绍使用方式略有不同的注解。
@NonNull
: 可避免空指针
//使用注解
public class NonNullExample extends Something {
private String name;
public NonNullExample(@NonNull Person person) {
super("Hello");
this.name = person.getName();
}
//不使用注解
public NonNullExample(Person person) {
super("Hello");
if (person == null) {
throw new NullPointerException("person");
}
this.name = person.getName();
}
@Cleanup
: 自动帮我们调用close()方法
//使用注解
public static void main(String[] args) throws IOException {
@Cleanup InputStream in = new FileInputStream(args[0]);
@Cleanup OutputStream out = new FileOutputStream(args[1]);
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
}
//不使用注解
public static void main(String[] args) throws IOException {
InputStream in = new FileInputStream(args[0]);
try {
OutputStream out = new FileOutputStream(args[1]);
try {
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
} finally {
if (out != null) {
out.close();
}
}
} finally {
if (in != null) {
in.close();
}
}