一、Lombok 注解大全
注解 | 作用 |
---|---|
@Getter | 类注解,代替 getter 方法。 |
@Setter | 类注解,代替 setter 方法。 |
@ToString | 类注解,生成 toString 方法。 |
@ToString.Exclude | 字段注解,排除不需要在 toString 中出现的字段。 |
@ToString.Include | 字段注解,标记需要出现在 toString 中的字段。 |
构造器相关注解 | |
@NoArgsConstructor | 类注解,生成无参构造方法。 |
@AllArgsConstructor | 类注解,生成除static字段之外带有各参数的构造方法。 |
@RequiredArgsConstructor | 作用于类,生成包含 final 和 @NonNull 注解的成员变量的构造方法。 |
@EqualsAndHashCode | 根据类所拥有的非静态字段自动重写 equals() 方法和 hashCode() 方法。 |
@EqualsAndHashCode.Exclude | 排除字段在重写的 equals 方法和 hashCode 方法中。 |
@EqualsAndHashCode.Include | 指定字段在重写的 equals 方法和 hashCode 方法中。 |
@Data | 类注解,综合注解,包含 :@Getter, @Setter, @ToString , @RequiredArgsConstructor, @EqualsAndHashCode。 |
@Value | 类注解,综合注解,包含:@Getter, @ToString, @RequiredArgsConstructor, @EqualsAndHashCode。 |
@Builder | 生成当前类的字段构建方法。生成 builder() 方法,并且直接根据字段名称方法进行字段赋值,最后使用 build() 方法构建出一个实体对象。 |
@Singular | 作用于集合字段,需要配合 @Builder 使用。 |
@SuperBuilder | 生成父类的字段构建方法。 |
@Synchronized | 作用于方法,可以替换 synchronized 关键字或 lock 锁。 |
@SneakyThrows | 在没有 throws 关键字的情况下,隐蔽地抛出受检查异常。 |
@val | 作用于类、变量,主要用于声明变量的类型,注解将从初始化程序表达式中推断类型,生成的变量是 final 类型。 |
@var | 和 @val 一样,作用于类、变量,主要用于声明变量的类型,注解将从初始化程序表达式中推断类型,两者区别在于 var 不加 final。 |
@With | 作用于类、变量,生成构造方法以及with + 变量名的方法,返回当前对象。 |
@WithBy | 只作用于类,只生成with + 变量名的方法,返回当前对象。 |
@Generated | 用于标记类、变量、方法是自动生成的,没什么大用。 |
@Cleanup | 标记需要释放清理操作的资源对象变量,标记之后资源对象使用完毕后,就会被自动关闭和清理。 |
日志注解 | |
@CommonsLog | org.apache.commons.logging.Log |
@Flogger | com.google.common.flogger.FluentLogger |
@JBosLog | org.jboss.logging.Logger |
@Log | java.util.logging.Logger |
@Log4j | org.apache.log4j.Logger |
@Log4j2 | org.apache.logging.log4j.Logger |
@Slf4j | org.slf4j.Logger |
@XSlf4j | org.slf4j.ext.XLogger |
实验性注解 | |
@Accessors | 类似于 @Builder 支持链式调用,需要配合 @Setter、@Getter 等注解使用,作用于类、变量。 |
@Delegate | 作用于容器变量,为该变量生成一堆常用的方法,这些方法都是容器中的方法。 |
@ExtensionMethod | 作用于类,向类添加方法,无需创建新的子类。 |
@FieldDefaults | 作用于类,定义变量的访问修饰符,以及是否设置为 final。 |
@FieldNameConstant | 作用于类,生成一个包含所有成员变量的内部类或者内部枚举,内部类中每个字段值即为字段名并且值不可变。 |
@Helper | 作用于方法内部类,使内部类中的方法暴露在外面可以被直接调用,不建议使用。 |
@NonFinal | 作用于类、变量,表示变量不加 final。 |
@PackagePrivate | 作用于类和变量,相当于访问修饰符的 default,没什么用。 |
@SuperBuilder | 支持对于基类成员变量赋值,算是 @Builder 的升级版。 |
@Tolerate | 实现对冲突的兼容,作用于方法上,没什么大用,可以配合 @Builder 使用。 |
@UtilityClass | 作用于类,将类标记为 final,并且类、内部类中的方法、字段都标记为 static。 |
@StandardException | 自定义异常类。 |
二、引入依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version> <!-- Spring Boot 项目此部分可以不写 -->
</dependency>
三、Lombok 的优缺点
-
优点:
能通过注解的形式自动生成构造器、getter / setter、equals、hashcode、toString 等方法,提高了一定的开发效率,让代码变得简洁,不用过多的去关注相应的方法。
属性做修改时,也简化了维护为这些属性所生成的 getter / setter 方法等。 -
缺点:
不支持多种参数构造器的重载。
虽然省去了手动创建一系列方法的麻烦,但大大降低了源代码的可读性和完整性,降低了阅读源代码的舒适度。
@EqualsAndHashCode(callSuper = true/false)
首先 @EqualsAndHashCode 标在子类上。
-
callSuper = true,根据子类自身的字段值和从父类继承的字段值 来生成hashcode,当两个子类对象比较时,只有子类对象的本身的字段值和继承父类的字段值都相同,equals方法的返回值是true。
-
callSuper = false,根据子类自身的字段值 来生成hashcode, 当两个子类对象比较时,只有子类对象的本身的字段值相同,父类字段值可以不同,equals方法的返回值是true。