Lombok:
简介:
通过注解,在编译阶段生成相关方法和类。
依赖:
<!-- Lombok依赖,不属于springboot,cloud家族,版本号自行指定 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
idea安装Lombok插件:
@Getter/@Setter:
作用类上,生成所有成员变量的getter/setter方法。
作用于成员变量上,生成该成员变量的getter/setter方法。
可以设定访问权限及是否懒加载等。
@ToString:
作用于类,覆盖默认的toString()方法。默认使用所有字段。
of属性限定显示某些字段。
exclude属性排除某些字段。
of的优先级高于exclude。
@NonNull:
标识不能为空,否则抛出空指针异常。
作用于方法参数:
@NoArgsConstructor:
生成无参构造器。
@AllArgsConstructor:
生成全参构造器。
@RequiredArgsConstructor:
生成包含final和@NonNull注解的成员变量的构造器。
@Data:
作用于类上,是以下注解的集合:@ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor。
@Builder:
作用于类上,将类转变为建造者模式。
//编译后
public class Person {
private String name;
private final int age;
private String email;
private String address;
private String password;
Person(String name, int age, String email, String address, String password) {
this.name = name;
this.age = age;
this.email = email;
this.address = address;
this.password = password;
}
public static PersonBuilder builder() {
return new PersonBuilder();
}
public static class PersonBuilder {
private String name;
private int age;
private String email;
private String address;
private String password;
public PersonBuilder name(String name) {
this.name = name;
return this;
}
public PersonBuilder age(int age) {
this.age = age;
return this;
}
public PersonBuilder email(String email) {
this.email = email;
return this;
}
public PersonBuilder address(String address) {
this.address = address;
return this;
}
public PersonBuilder password(String password) {
this.password = password;
return this;
}
public Person build() {
return new Person(this.name, this.age, this.email, this.address, this.password);
}
public String toString() {
return "Person.PersonBuilder(name=" + this.name + ", age=" + this.age + ", email=" + this.email + ", address=" + this.address + ", password=" + this.password + ")";
}
}
}
@Builder和继承:
@Builder修饰的类会生成全参构造器,如果父类和子类都用@Builder修饰,子类会报错:找不到父类的无参构造器。
解决办法:父类添加无参构造器注解@NoArgsConstructor。但是Lomhok底层@NoArgsConstructor和@Builder冲突,无法生成无参构造器。通过将@NoArgsConstructor,@AllArgsConstructor一起加上可解决冲突。
总结:@Builder修饰的类加上@NoArgsConstructor,@AllArgsConstructor注解。
@Builder和泛型:
有泛型修饰的类用@Builder修饰,无法在编译期生成相关代码,因此无法使用Lomhok的构建者模式。
目前没有有效的解决办法,使用传统的构建对象的方式实现。
@Slf4j:
自动添加日志属性。
private final Logger logger = LoggerFactory.getLogger();
@SneakyThrows:
方法的检查时异常在编译期要求显示抛出,@SneakyThrows把该方法可能抛出的检查时异常封装成运行时异常抛出。