前言

lombok一些注解的含义整理

1、@Accessors(chain = true)

链式风格,在调用set方法时,返回这个类的实例对象,比如:a.b.c

2、@Data

在JavaBean或类JavaBean中使用,这个注解包含范围最广,它包含getter、setter、NoArgsConstructor、equals、canEqual、hashCode、toString 注解,即当使用当前注解时,会自动生成包含的所有方法;

3、@getter

在JavaBean或类JavaBean中使用,使用此注解会生成对应的getter方法;

4、@setter

在JavaBean或类JavaBean中使用,使用此注解会生成对应的setter方法;

5、@NoArgsConstructor

在JavaBean或类JavaBean中使用,使用此注解会生成对应的无参构造方法;

6、@AllArgsConstructor

在JavaBean或类JavaBean中使用,使用此注解会生成对应的有参构造方法;

7、@RequiredArgsConstructor

@NoArgsConstructor 注解是针对标有 @NonNull 注解的变量和 final 变量进行参数的构造方法。

8、@ToString

在JavaBean或类JavaBean中使用,使用此注解会自动重写对应的toStirng方法;

9、@EqualsAndHashCode

在JavaBean或类JavaBean中使用,使用此注解会自动重写对应的equals方法和hashCode方法;

10、@Slf4j

在需要打印日志的类中使用,当项目中使用了slf4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可;

11、@Log4j

在需要打印日志的类中使用,当项目中使用了log4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可;

12、@Value

用在类上,是@Data的不可变形式,相当于为属性添加final声明,只提供getter方法,而不提供setter方法

13、@Builder

用在类、构造器、方法上,为你提供复杂的builder APIs,让你可以像如下方式一样调用Person.builder().name(“Adam Savage”).city(“San Francisco”).job(“Mythbusters”).job(“Unchained Reaction”).build(); 更多说明参考Builder

14、@SneakyThrows

自动抛受检异常,而无需显式在方法上使用throws语句

15、@Synchronized

用在方法上,将方法声明为同步的,并自动加锁,而锁对象是一个私有的属性$lock或$LOCK,而java中的synchronized关键字锁对象是this,锁在this或者自己的类对象上存在副作用,就是你不能阻止非受控代码去锁this或者类对象,这可能会导致竞争条件或者其它线程错误

16、@val

用在局部变量前面,相当于将变量声明为final

17、@NonNull

给方法参数增加这个注解会自动在方法内对该参数进行是否为空的校验,如果为空,则抛出NPE(NullPointerException)

18、@Cleanup

自动管理资源,用在局部变量之前,在当前变量范围内即将执行完毕退出之前会自动清理资源,自动生成try-finally这样的代码来关闭流

19、@Log

根据不同的注解生成不同类型的log对象,但是实例名称都是log,有六种可选实现类

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
@CommonsLog 
Creates log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
@Log 
Creates log = java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4j 
Creates log = org.apache.log4j.Logger.getLogger(LogExample.class);
@Log4j2 
Creates log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
@Slf4j 
Creates log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
@XSlf4j 
Creates log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);

20、额外用法

在使用以上注解需要处理参数时,处理方法如下(以@ToString注解为例,其他注解同@ToString注解):

@Getter(lazy=true)

可以替代经典的Double Check Lock样板代码

@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参数;

@ToString(callSuper=true, includeFieldNames=true)

意义:调用父类的toString方法,包含所有属性

@RequiredArgsContructor(staticName = “of”)

生成一个静态方法,用于构建本类对象,与@NonNull联用,指定那些属性是本方法参数

21、参考和引用

lombok1: https://www.cnblogs.com/pascall/p/10281169.html lombok2: https://www.cnblogs.com/mayhh/p/10113169.html