一、简介
二、Idea中配置
三、Maven中配置
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
四、相应注解
1、@Data
作用位置: 类上(实体类)
用途:
是1个注解集合:
- @ToString
- @EqualsAndHashCode
- @Getter
- @Setter
- @RequiredArgsConstructor
案例:
@Data
public class User {
private String name;
private int age;
private String address;
}
2、@RequiredArgsConstructor
作用位置: 类上(实体类)
用途:
注解 集合:
- @AllArgsConstructor
- @NoArgsConstructor
案例:
@RequiredArgsConstructor
public class User {
private String name;
private int age;
private String address;
}
3、@AllArgsConstructor
作用位置: 类上(实体类)
用途: 生成全参构造器
案例:
@AllArgsConstructor
public class User {
private String name;
private int age;
private String address;
}
4、@NoArgsConstructor
作用位置: 类上(实体类)
用途: 生成无参构造器
案例:
@NoArgsConstructor
public class User {
private String name;
private int age;
private String address;
}
5、@Getter/@Setter:
作用位置: 类上(实体类)、成员变量
用途:
作用类上:生成所有成员变量的getter/setter
方法
成员变量:生成该成员变量的getter/setter
方法
案例:
@Getter
@Setter
public class User {
private String name;
private int age;
private String address;
}
6、@ToString
作用位置: 作用于类。
用途: 覆盖默认的toString()
方法。
案例:
@ToString
public class User {
private String name;
private int age;
private String address;
}
7、@EqualsAndHashCode
作用位置: 作用于类
用途: 覆盖默认的equals和hashCod
案例:
@EqualsAndHashCode
public class User {
private String name;
private int age;
private String address;
}
8、@Builder
作用位置: 作用于类上
用途: 将类转变为建造者模式
案例:
import lombok.Builder;
@Builder
public class User {
private String name;
private int age;
private String address;
}
public void test() {
User build = User.builder()
.name("张三")
.age(18)
.address("北京")
.build();
}
9、@NonNull
作用位置: 成员变量和参数中
用途: 标识不能为空,否则抛出空指针异常
案例:
public NonNullExample(@NonNull Person person) {
super("Hello");
this.name = person.getName();
}
10、@Log
作用位置: 作用于类上
用途: 生成日志变量。针对不同的日志实现产品,有不同的注解
java.util.logging.Logger
java.util.logging.Logger#getLogger(java.lang.String)
@CommonsLog
@Log4j
@Log4j2
@Slf4j
@XSlf4j
@JBossLog
@Flogger
@CustomLog
案例:
@Log
public class Test {
public void test() {
}
}
11、@Slf4j
作用位置: 类
用途: 表明使用slf4j
日志门面
案例:
@Slf4j
public class LogExampleOther {
public void test() {
log.error("Something else is wrong here");
}
}
12、@Log4j2
作用位置:
用途:
- 自动关闭资源
- 针对实现了java.io.Closeable接口的对象有效,如:典型的IO流对象
案例:
@Log4j2
public class LogExampleOther {
public void test() {
log.error("Something else is wrong here");
}
}
13、@SneakyThrows
作用位置:
用途: 可以对受检异常进行捕捉并抛出
案例:
import lombok.SneakyThrows;
public class SneakyThrowsExample implements Runnable {
@SneakyThrows(UnsupportedEncodingException.class)
public String utf8ToString(byte[] bytes) {
return new String(bytes, "UTF-8");
}
@SneakyThrows
public void run() {
throw new Throwable();
}
}
14、@Cleanup
作用位置:
案例:
import lombok.Cleanup;
import java.io.*;
public class CleanupExample {
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);
}
}
}
15、@Synchronized
- 作用于方法级别,可以替换synchronize关键字或lock锁
- 用处不大
16、@SneakyThrows
使用位置: 方法
作用: 可以将方法中的代码用 try-catch 语句包裹起来,捕获异常并在 catch 中用 Lombok.sneakyThrow(e) 把异常抛出,可以使用 @SneakyThrows(Exception.class) 的形式指定抛出哪种异常。
案例:
import lombok.SneakyThrows;
public class SneakyThrowsExample implements Runnable {
@SneakyThrows(UnsupportedEncodingException.class)
public String utf8ToString(byte[] bytes) {
return new String(bytes, "UTF-8");
}
@SneakyThrows
public void run() {
throw new Throwable();
}
}
效果:
import lombok.Lombok;
public class SneakyThrowsExample implements Runnable {
public String utf8ToString(byte[] bytes) {
try {
return new String(bytes, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw Lombok.sneakyThrow(e);
}
}
public void run() {
try {
throw new Throwable();
} catch (Throwable t) {
throw Lombok.sneakyThrow(t);
}
}
}