Lombok
Lombok是一个Java库,旨在通过注解的方式在编译期间自动生成getter、setter、equals、hashCode、toString等方法。
引入依赖
1 2 3 4 5 6 7 8
| <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>最新版本号</version> <scope>provided</scope> </dependency> </dependencies>
|
Maven项目直接引入依赖即可。
意义
Java体现的是一切皆为对象的思想,好比说我们定义了一个用户类,这个类有名字,密码,年龄,性别等信息,那么如果我们需要操作这个类的实例化对象,因为他不是最基本的数据类型,也不是JAVA自己已经定义的数据结构,所以我们就必须重写他的getter(获取)、setter(设置)、equals(判断等同)、hashCode(判断逻辑等同)、toString(字符串形式表述)等方法,才能方便地使用它,但是随着工程量上升,这一部分往往是枯燥且麻烦的工作,所以Lombok被设计出来能够帮我们完成这个任务。
Lombok不会直接修改项目的源代码,他会在 Java 编译过程中 默默工作的“代码助手”。它并非在运行时通过反射等机制动态生成代码,而是直接在源代码编译为字节码的阶段,通过修改编译器的 抽象语法树(AST) 来“添加”代码,最终生成的 .class文件就已经包含了所有完整的方法。
Lombok常见注解方法
- @Getter 和 @Setter:
自动生成属性的getter和setter方法。
1 2 3 4 5 6 7
| import lombok.Getter; import lombok.Setter; public class User { @Getter @Setter private String name; @Getter @Setter private int age; }
|
- @NoArgsConstructor:
自动生成无参构造方法。
1 2 3 4 5 6 7
| import lombok.NoArgsConstructor; @NoArgsConstructor public class User { private String name; private int age; }
|
- @AllArgsConstructor:
自动生成全参构造方法。
1 2 3 4 5 6 7
| import lombok.AllArgsConstructor; @AllArgsConstructor public class User { private String name; private int age; }
|
- @RequiredArgsConstructor:
自动生成包含final属性和@NonNull属性的构造方法。
1 2 3 4 5 6 7 8
| import lombok.RequiredArgsConstructor; import lombok.NonNull; @RequiredArgsConstructor public class User { private final String name; private int age; }
|
- @ToString:
自动生成toString方法。
1 2 3 4 5 6 7
| import lombok.ToString; @ToString public class User { private String name; private int age; }
|
- @EqualsAndHashCode:
自动生成equals和hashCode方法。
1 2 3 4 5 6 7
| import lombok.EqualsAndHashCode; @EqualsAndHashCode public class User { private String name; private int age; }
|
- @Data:
组合了@Getter、@Setter、@ToString、@EqualsAndHashCode和@RequiredArgsConstructor的功能。
1 2 3 4 5 6 7 8 9 10 11
| import lombok.Data; import lombok.NoArgsConstructor; import lombok.AllArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class User { private String name; private int age; }
|
- @Slf4j:
自动生成名为log的日志记录器字段。
1 2 3 4 5 6 7 8
| import lombok.extern.slf4j.Slf4j; @Slf4j public class MyClass { public void myMethod() { log.info("Logging something..."); } }
|