1. 背景
之前在Spring框架中,一直使用@AutoWired注解注入成员变量。现在使用公司封装的框架做标品开发,突然发现了@AllArgsConstructor、@RequiredArgsConstructor的特殊用法,类似于Spring中的构造函数注入。
2. 场景
报错:引入的成员变量未被初始化。
解决措施:加上@AllArgsConstructor注解或@RequiredArgsConstructor注解。
3. lombok详细介绍
3.1. 构造方法相关注解
@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor。是Lombok插件三种生成不同构造方法的注解,来完成项目中不同构造方法的需求。
-
@NoArgsConstructor : 生成一个无参数的构造方法。
如果因为final字段未初始化导致构造失败,则会导致编译失败。可以使用@NoArgsConstructor(force
= true)参数,从而强制将未初始化的fianl字段赋值为 0 / false / null。 对于具有约束的字段(例如 @NonNull 字段),不会进行检查。 -
@AllArgsContructor: 会生成一个包含所有变量的构造方法。
为类中的每个字段生成一个具有1个参数的构造函数。 标记为@Non Null的字段会进行空值检查。 -
@RequiredArgsConstructor: 会生成一个包含常量,和标识了NotNull变量的构造方法。生成的构造方法是私有的private。
为有需要特殊处理的字段生成带有一个参数的构造函数,所有未能初始化的fianl字段,以及被标记为@NonNull且在声明时没有初始化的字段,都是该构造函数的参数。
参数的顺序与类中字段出现的顺序是保持一致的,对于@NonNull的字段也会进行空值检查,如果不符合校验规则,抛出空指针异常。
3.2 其他常用注解
-
@Getter and @Setter
可以用@Getter / @Setter注释字段(也可以注释到类上的—(在实体类中常用且推荐)),lombok会自动生成默认的Getter/Setter方法。 -
@ToString
自动生成toString()方法,默认情况,按顺序(以“,”分隔)打印你的类名称以及每个字段。也可以设置不包含哪些字段/@ToString(exclude = {“id”,“name”}) -
@Data
注解在类上, 为类提供读写属性, 此外还提供了 equals()、hashCode()、toString() 方法 -
@Slf4j
注解在类上, 为类提供一个属性名为 log 的 log4j 的日志对象