概念:Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率
开发环境:Lombok需要的开发环境Java+Maven+IntelliJ IDEA或者Eclipse(安装Lombok Plugin)
1. 添加maven依赖
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
2. 常用注解
- @Setter
注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法。可以设定访问权限及是否懒加载等。static 类型和 final 的变量不生成。
- @Getter
使用方法同上,区别在于生成的是getter方法。可以设定访问权限及是否懒加载等。
static 类型的变量不生成
@Getter(AccessLevel.NONE)----@Setter(AccessLevel.NONE)设置访问权限
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Student {
static String str = "";
final Integer salary = 10000;
private int id;
private String name;
@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private int age;
}
- @ToString
注解在类,添加toString方法。可以通过of属性限定显示某些字段,通过exclude属性排除某些字段。示例:@ToString(exclude = {"name","age"})
- @EqualsAndHashCode
注解在类,生成 hashCode 、canEqual、 equals 方法。也可以通过of属性限定显示某些字段,通过exclude属性排除某些字段。示例:@EqualsAndHashCode(of = {"name","age"})
- @NonNull
主要作用于成员变量和参数中,标识不能为空,否则抛出空指针异常
- @NoArgsConstructor 注解在类,生成无参的构造方法
- @RequiredArgsConstructor 注解在类,生成包含 final 和 @NonNull 注解的成员变量的构造器
- @AllArgsConstructor 注解在类,生成包含类中所有字段的构造方法
- @Data 注解在类,注解在类上,相当于同时使用了@ToString、@EqualsAndHashCode、@Getter、@Setter 和 @RequiredArgsConstrutor 这些注解,如为final属性,则不会为该属性生成setter方法
- @Builder 作用于类上,将类转变为建造者模式
Student.builder().id(10003).name("冯世龙").age(24).build();
@Data
@Builder
public class Student {
private int id;
private String name;
private int age;
public static void main(String[] args) {
Student student = Student.builder().id(10003).name("冯世龙").age(24).build();
System.out.println(student); // Student(id=10003, name=冯世龙, age=24)
}
}
- @Slf4j 注解在类,为类提供一个 属性名为 log 的 Slf4j 日志对象
- val:不是注解
- @Cleanup:清理资源
public static void main(String[] args) throws FileNotFoundException {
@Cleanup InputStream inputStream = new FileInputStream("filepath");
@Cleanup OutputStream path = new FileOutputStream("path");
}
- @Log 生成log对象,用于记录日志。
@Data
@Builder
@Log
public class Student {
private int id;
private String name;
private int age;
public static void main(String[] args) {
log.info("哈哈哈"); // 信息: 哈哈哈
Student student = Student.builder().id(10003).name("冯世龙").age(24).build();
System.out.println(student); // Student(id=10003, name=冯世龙, age=24)
}
}
3. Lombok工作原理
Lombok不是通过字节码改写来实现的。它主要是用编译器内支持的annotation processing,直接操纵抽象语法树(AST),根据需要添加新节点。
4. 优缺点
4.1. 优点:
- 通过注解的形式自动生成构造器、getter/setter、equals、hashcode等方法,提高了一定的开发效率
- 让代码变得简洁
- 属性做修改时,也简化了维护为这些属性所生成的getter/setter方法等
4.2. 缺点:
- 不支持多种参数构造器的重载
- 虽然省去麻烦,但大大降低了源代码的可读性和完整性,降低了阅读源代码的舒适度
7.IDEA中使用lombok
- 在idea中,安装lombok插件;
- 在Annotation Processors 中 勾选 Enable annotation processing ;