lombok是一个可以帮助我们简化java代码编写的工具类,尤其是简化javabean的编写,即通过采用注解的方式,消除代码中的构造方法,getter/setter等代码,使我们写的类更加简洁,当然,这带来的副作用就是不易阅读…不过,还是能看得懂吧,废话不多说,先看一下lombok支持的一些常见的注解。
一、添加依赖
<!-- lombok依赖包 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
<scope>provided</scope>
</dependency>
二、常用注解
1.@Builder
作用域:类。
作用:生成构建器。可以通过类名点属性(赋值),如:User.name("小明")。
注:会自动生成全参构造方法,可能会导致默认无参构造方法失效。
@Builder
2.@NonNull
作用域:成员变量、方法参数。
作用:会自动产生一个关于此参数的非空检查,如果参数为空,则抛出一个空指针异常。
@NonNull
3.@Cleanup
作用域:变量。
作用:可以保证此变量代表的资源会被自动关闭,默认是调用资源的close()方法,如果该资源有其它关闭方法,可使用@Cleanup(“close”)来指定要调用的方法 。
@Cleanup
// 实例,自动关闭IO流
@Cleanup ByteArrayOutputStream baos = new ByteArrayOutputStream();
4.@Getter/@Setter
作用域:类、成员变量。
作用:为成员变量生成对应的get和set方法,为生成的方法指定访问修饰符,默认为public。
@Getter/@Setter
5.@ToString
作用域:类。
作用:生成toString方法。
注:@ToString有多个属性可以进一步设置:
- callSuper 是否输出父类的toString方法,默认为false。
- includeFieldNames 是否包含字段名称,默认为true。
- exclude 排除生成tostring的字段。
- of 只生成tostring的字段。
@ToString
@ToString(exclude={"column1","column2"})// 排除多个column列所对应的元素
@ToString(of={"column1","column2"})// 只生成包含多个column列所对应的元素
6.@EqualsAndHashCode
作用域:类。
作用:生成equals和hashcode方法 。
@EqualsAndHashCode
7.@NoArgsConstructor
作用域:类。
作用:生成无参构造。
@NoArgsConstructor
8.@RequiredArgsConstructor
作用域:类。
作用:为类中需要特殊处理的字段生成构造方法,比如final和被@NonNull注解的字段。
@RequiredArgsConstructor
9.@AllArgsConstructor
作用域:类。
作用:生成全参构造。
@AllArgsConstructor
10.@Data
作用域:类。
作用:相当于同时加上以下注解@Setter @Getter,@ToString,@EqualsAndHashCode。
@Data
11.@Value
作用域:成员变量。
作用:从配置文件读取值或进行赋值。
注:@Value("${spring.application.name}")若配置文件中没有,则在启动项目时报错,若想避免该情况可以给定默认值,@Value("${spring.application.name:张三}")若配置文件中没有该配置则直接使用xiaoming进行赋值。
@Value
// 实例一
@Value("张三")
private String name;// name=张三
// 实例二
@Value("${spring.application.name}")
private String name;// 若配置文件中没有则启动项目时报错
// 实例三
@Value("${spring.application.name:张三}")
private String name;// 若配置文件中没有则name=张三,若配置文件有则获取配置文件的值
12.@SneakyThrows
作用域:方法。
作用:可以将方法中的代码用try-catch语句包裹起来,捕获异常并在catch中用Lombok.sneakyThrow(e)把异常抛出。
注:可以在注解上指定捕获的异常,如@SneakyThrows (Exception.class)。
@SneakyThrows
13.@Synchronized
作用域:方法。
作用:同步方法安全的转化,注解后面可以指定锁对象。
注:效果和synchronized关键字相同,区别在于锁对象不同,对于类方法和实例方法,synchronized关键字的锁对象分别是类的class对象和this对象,而@Synchronized得锁对象分别是私有静态final对象LOCK和私有final对象lock。
@Synchronized
14.@Slf4j
作用域:类。
作用:生成log变量,严格意义来说是常量。可以选择不同的日志级别进行输出。
注:针对不同的日志实现产品,有不同的日志注解,除了@Slf4j,还可以使用 @Log4j 、 @Log4j2 、 @Log等注解,来使用不同的日志产品。
@Slf4j