# Lombok
Lombok项目是一个java库,它可以自动插入到编辑器和构建工具中,增强java的性能。不需要再写getter、setter或equals方法,只要有一个注解,你的类就有一个功能齐全的构建器、自动记录变量等等。
# @Getter和@Setter
该注解可应用在类或成员变量之上,和我们预想的一样,@Getter
和 @Setter
就是为成员变量自动生成 get 和 set 方法,默认生成访问权限为 public 方法,当然我们也可以指定访问权限 protected 等
# @EqualsAndHashCode
该注解需应用在类上,使用该注解,lombok会为我们生成 equals(Object other) 和 hashcode() 方法,包括所有非静态属性和非transient的属性,同样该注解也可以通过 exclude 属性排除某些字段,of 属性指定某些字段,也可以通过 callSuper 属性在重写的方法中使用父类的字段,这样我们可以更灵活的定义bean的比对
# @NonNull
该注解需应用在方法或构造器的参数上或属性上,用来判断参数的合法性,默认抛出 NullPointerException 异常
# @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor
以上三个注解分别为我们生成无参构造器,指定参数构造器和包含所有参数的构造器,默认情况下,@RequiredArgsConstructor, @AllArgsConstructor 生成的构造器会对所有标记 @NonNull 的属性做非空校验。
# @Data
介绍了以上的注解,再来介绍 @Data 就非常容易懂了,@Data 注解应用在类上,是@ToString, @EqualsAndHashCode, @Getter / @Setter 和 @RequiredArgsConstructor合力的体现
# @Builder
函数式编程或者说流式的操作越来越流行,应用在大多数语言中,让程序更具更简介,可读性更高,编写更连贯,@Builder
就带来了这个功能,生成一系列的builder API,该注解也需要应用在类上,看下面的例子就会更加清晰明了。
# @Log
该注解需要应用到类上,在编写服务层,需要添加一些日志,以便定位问题,我们通常会定义一个静态常量Logger,然后应用到我们想日志的地方,现在一个注解就可以实现:
# val
熟悉 Javascript 的同学都知道,var 可以定义任何类型的变量,而在 java 的实现中我们需要指定具体变量的类型,而 val 让我们摆脱指定,编译之后就精准匹配上类型,默认是 final 类型,就像 java8 的函数式表达式,()->System.out.println(“hello lombok”); 就可以解析到Runnable函数式接口。
# @Cleanup
当我们对流进行操作,我们通常需要调用 close 方法来关闭或结束某资源,而 @Cleanup 注解可以帮助我们调用 close 方法,并且放到 try/finally 处理块中