一、简介
https://projectlombok.org/
二、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); } } }
五、XMind整理
https://download.csdn.net/download/weixin_44624117/87738347