Lombok的介绍与使用
Lombok通过简单注解来实现精简代码来达到消除冗长代码的目的。它能够提高编码效率、使代码更简洁、消除冗长代码、避免修改字段名时忘记修改方法名。
一、Lombok注解
Lombok主要常用的注解有:
1. @Data
注解在类上。在JavaBean或类JavaBean中使用,这个注解包含范围最广,它包含getter、setter、NoArgsConstructor、equals、canEqual、hashCode、toString 注解,即当使用注解时,会自动生成包含的所有方法;
2. @Setter
注解在类上。使用此注解会生成对应的setter方法。
3. Getter
注解在类上。使用此注解会生成对应的getter方法。
4. @NoArgsConstructor
注解在类上。使用此注解会生成对应的无参构造方法。
5. @AllArgsConstructor
注解在类上。使用此注解会生成对应的有参构造方法。
6. @ToString
注解在类上。使用此注解会自动重写对应的toStirng方法。
7. @EqualsAndHashCode
注解在类上。使用此注解会自动重写对应的equals方法和hashCode方法。
8. @Slf4j
注解在类上。当项目中使用了slf4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可;
9. @Log4j
注解在类上。当项目中使用了log4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可。
---------------------------------------------------------------------------------------------------
在使用以上注解需要处理参数时,处理方法如下(以@ToString注解为例,其他注解同@ToString注解):
@ToString(exclude="column")
意义:排除column列所对应的元素,即在生成toString方法时不包含column参数;
@ToString(exclude={"column1","column2"})
意义:排除多个column列所对应的元素,其中间用英文状态下的逗号进行分割,即在生成toString方法时不包含多个column参数;
@ToString(of="column")
意义:只生成包含column列所对应的元素的参数的toString方法,即在生成toString方法时只包含column参数;;
@ToString(of={"column1","column2"})
意义:只生成包含多个column列所对应的元素的参数的toString方法,其中间用英文状态下的逗号进行分割,即在生成toString方法时只包含多个column参数;
---------------------------------------------------------------------------------------------------
10. val
用在局部变量前面,相当于将变量声明为final。
11. @NonNull
给方法参数增加这个注解会自动在方法内对该参数进行是否为空的校验,如果为空,则抛出NPE(NullPointerException)
12. @Cleanup
自动管理资源,用在局部变量之前,在当前变量范围内即将执行完毕退出之前会自动清理资源,自动生成try-finally这样的代码来关闭流
13. @Value
用在类上,是@Data的不可变形式,相当于为属性添加final声明,只提供getter方法,而不提供setter方法
14. @Builder
用在类、构造器、方法上,为你提供复杂的builder APIs,让你可以像如下方式一样调用Person.builder().name("Adam Savage").city("San Francisco").job("Mythbusters").job("Unchained Reaction").build();
15. @SneakyThrows
自动抛受检异常,而无需显式在方法上使用throws语句
16. @Synchronized
用在方法上,将方法声明为同步的,并自动加锁,而锁对象是一个私有的属性$lock或$LOCK,而java中的synchronized关键字锁对象是this,锁在this或者自己的类对象上存在副作用,就是你不能阻止非受控代码去锁this或者类对象,这可能会导致竞争条件或者其它线程错误
二、使用Lombok
添加依赖:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>