Lombok

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> <!-- 替换为下载的Lombok版本 -->
<scope>provided</scope>
</dependency>
</dependencies>

Maven项目直接引入依赖即可。

意义

Java体现的是一切皆为对象的思想,好比说我们定义了一个用户类,这个类有名字,密码,年龄,性别等信息,那么如果我们需要操作这个类的实例化对象,因为他不是最基本的数据类型,也不是JAVA自己已经定义的数据结构,所以我们就必须重写他的getter(获取)、setter(设置)、equals(判断等同)、hashCode(判断逻辑等同)、toString(字符串形式表述)等方法,才能方便地使用它,但是随着工程量上升,这一部分往往是枯燥且麻烦的工作,所以Lombok被设计出来能够帮我们完成这个任务。

Lombok不会直接修改项目的源代码,他会在 Java 编译过程中 默默工作的“代码助手”。它并非在运行时通过反射等机制动态生成代码,而是直接在源代码编译为字节码的阶段,通过修改编译器的 抽象语法树(AST) 来“添加”代码,最终生成的 .class文件就已经包含了所有完整的方法。

Lombok常见注解方法

  1. @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;
}
  1. @NoArgsConstructor:
    自动生成无参构造方法。
1
2
3
4
5
6
7
import lombok.NoArgsConstructor;

@NoArgsConstructor
public class User {
private String name;
private int age;
}
  1. @AllArgsConstructor:
    自动生成全参构造方法。
1
2
3
4
5
6
7
import lombok.AllArgsConstructor;

@AllArgsConstructor
public class User {
private String name;
private int age;
}
  1. @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;
}
  1. @ToString:
    自动生成toString方法。
1
2
3
4
5
6
7
import lombok.ToString;

@ToString
public class User {
private String name;
private int age;
}
  1. @EqualsAndHashCode:
    自动生成equals和hashCode方法。
1
2
3
4
5
6
7
import lombok.EqualsAndHashCode;

@EqualsAndHashCode
public class User {
private String name;
private int age;
}
  1. @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;
}
  1. @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...");
}
}