一、 Lombok 注解
分类 | 注解 | 作用 | 常用参数/示例 |
---|---|---|---|
核心类注解 | @Getter /@Setter | 自动生成字段的 getter/setter 方法 | @Setter(AccessLevel.PROTECTED) 指定访问权限 |
@ToString | 生成 toString() 方法 | @ToString(exclude = "id") 排除字段 | |
@EqualsAndHashCode | 生成 equals() 和 hashCode() 方法 | @EqualsAndHashCode(callSuper = true) 包含父类字段 | |
@Data | 复合注解:包含 @Getter 、@Setter 、@ToString 、@EqualsAndHashCode | 适用于 POJO 类 | |
构造器注解 | @NoArgsConstructor | 生成无参构造器 | 无参 |
@AllArgsConstructor | 生成全字段构造器 | 全参 | |
@RequiredArgsConstructor | 为 final 或 @NonNull 字段生成构造器 | 仅含必填字段 | |
设计模式 | @Builder | 实现建造者模式,支持链式调用 | User.builder().name("Tom").build() |
@Value | 生成不可变类(类似 @Data ,字段默认为 final ) | 适用于值对象 | |
工具类注解 | @NonNull | 自动校验参数或字段非空 | public void setName(@NonNull String name) |
@SneakyThrows | 将受检异常转换为非受检异常 | 无需显式 throws | |
@Cleanup | 自动管理资源(如关闭流) | @Cleanup InputStream input = new FileInputStream("file.txt") | |
@Synchronized | 替代 synchronized 关键字 | 可指定锁对象 | |
日志注解 | @Slf4j | 生成 SLF4J 日志对象 log | log.info("Running...") |
其他 | @Accessors(chain = true) | 开启链式调用(Setter 返回 this ) | user.setName("A").setAge(20) |
二、引入Maven的依赖
<!--lombok 实体类封装-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.38</version>
</dependency>
三、 注解的使用
(一)核心类注解
1.@Getter/@Setter: 自动生成getter/setter
@Getter
@Setter
public class Dept {
private Long id;
private String name;
private Date createTime;
private Date updateTime;
}
等同于===如下:
2. @ToString:自动重写 toString() 方法,会印出所有变量
@ToString
public class Dept {
private Long id;
private String name;
private Date createTime;
private Date updateTime;
}
等同于===如下:
3. @EqualsAndHashCode
自动生成 equals(Object other) 和 hashcode() 方法,包括所有非静态变量和非 transient 的变量
@EqualsAndHashCode(callSuper = false)
public class Dept {
private Long id;
private String name;
private Date createTime;
private Date updateTime;
}
等同于===如下:
4. @Data:整合包,只要加了 @Data 这个注解,等于同时加了以下注解
@Getter/@Setter
@ToString
@EqualsAndHashCode
@Data
public class Dept {
private Long id;
private String name;
private Date createTime;
private Date updateTime;
}
等同于===如下:
(二)构造器注解
1、@NoArgsConstructor : 生成一个没有参数的构造器
@NoArgsConstructor
public class Dept {
private Long id;
private String name;
private Date createTime;
private Date updateTime;
}
等同于===如下:
2、@AllArgsConstructor : 生成一个包含所有参数的构造器
@AllArgsConstructor
public class Dept {
private Long id;
private String name;
private Date createTime;
private Date updateTime;
}
等同于===如下:
3、@RequiredArgsConstructor : 生成一个包含 "特定参数" 的构造器,特定参数指的是那些有加上 final 修饰词的变量
注意:如果所有的变量都是正常的,都没有用 final 修饰的话,那就会生成一个没有参数的构造器
@RequiredArgsConstructor
public class Dept {
private final Long id;
private String name;
private Date createTime;
private Date updateTime;
}
等同于===如下:
(三)、设计模式
1、@Builder :
自动生成流式 set 值写法,从此之后再也不用写一堆 setter ;
@Builder
public class Dept {
private Long id;
private String name;
private Date createTime;
private Date updateTime;
}
public static void main(String[] args) {
Dept dept = Dept.builder()
.id(1L)
.name("dept1")
.createTime(new Date(System.currentTimeMillis()))
.build();
System.out.println(dept);
}
等同于===如下:
2、 @Value:整合包,但是他会把所有的变量都设成 final 的,其他的与 @Data 一样,等于同时加了以下注解
@Getter (注意没有setter)
@ToString
@EqualsAndHashCode
@RequiredArgsConstructor
@Value
public class Dept {
private Long id;
private String name;
private Date createTime;
private Date updateTime;
}