一、Lombok介绍
Lombok是一个Java库,可以通过注解来简化Java类的编写,减少冗余的样板代码。它提供了一系列的注解,用于自动生成常见的代码,如getter和setter方法、构造函数、equals和hashCode方法、toString方法等。通过使用Lombok,开发者可以更加专注于业务逻辑的实现,减少了繁琐的重复劳动。
二、Lombok常用注解
2.1 @Getter/@Setter
@Getter和@Setter注解是Lombok库的一部分,它们会自动为你的类生成getter和setter方法。这些方法通常用于访问类的私有字段。可以添加在类上或者方法上。
这是如何使用这些注解的一些基本示例:
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private String name;
private int age;
private String password;
}
AccessLevel
是Lombok中的一个属性,用于指定生成的getter、setter方法的访问级别。
AccessLevel
有三个可选值:
AccessLevel.PUBLIC
:生成public访问级别的getter方法。AccessLevel.PROTECTED
:生成protected访问级别的getter方法。AccessLevel.NONE
:不生成getter方法,属性保持私有,无法从外部访问。
上面的基本示例代码如果希望外部不能操作password属性,即可使用AccessLevel属性
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private String name;
private int age;
@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private String password;
}
2.2 @ToString
@ToString
是Lombok库中的一个注解,用于自动生成toString方法。通过在类上添加@ToString
注解,Lombok将根据类的字段生成一个toString方法,返回一个包含类名和字段值的字符串。
下面是一个使用@ToString
注解的示例:
import lombok.ToString;
@ToString
public class Person {
private String name;
private int age;
}
在这个示例中,Lombok会自动生成一个toString方法,如下所示:
public String toString() {
return "Person(name=" + this.getName() + ", age=" + this.getAge() + ")";
}
2.3 @EqualsAndHashCode
@EqualsAndHashCode
是Lombok库中的一个注解,它自动生成equals()
和hashCode()
方法。当你在类上添加@EqualsAndHashCode
注解后,Lombok会根据类的字段生成相应的equals()
和hashCode()
方法。
equals()
方法用于比较两个对象是否相等,而hashCode()
方法返回对象的哈希码值。在Java中,这两个方法是Object类的一部分,用于支持对象比较和散列操作。
以下是一个使用@EqualsAndHashCode
注解的示例:
import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class Person {
private String name;
private int age;
}
Lombok将根据这个类的字段生成以下equals()
和hashCode()
方法:
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
2.4 @NonNull
@NonNull
是 Lombok 库中的一个注解,用于指示一个参数、返回值或字段不能为 null。当你在类的方法或字段上使用 @NonNull
注解时,Lombok 会自动生成校验代码,确保该方法或字段在使用前不为 null。
以下是一个使用 @NonNull
注解的示例:
import lombok.NonNull;
public class Example {
@NonNull
private String name;
public void setName(@NonNull String name) {
this.name = name;
}
public String getName() {
return name;
}
}
在上面的示例中,name
字段和 setName()
方法都使用了 @NonNull
注解。这表示 name
字段不能为 null,如果尝试将 null 值赋给 name
,Lombok 将自动生成校验代码抛出异常。同样,setName()
方法也不会允许传入 null 参数。
使用 @NonNull
注解可以帮助开发人员避免空指针异常,并在编译时检查非空约束。它是一种方便的工具,可以提高代码的可读性和健壮性。
2.5 @NoArgsConstructor
@NoArgsConstructor
是 Lombok 库中的一个注解,用于自动生成一个无参构造函数。当你在类上添加 @NoArgsConstructor
注解时,Lombok 会根据类的字段生成一个无参构造函数。
2.6 @RequiredArgsConstructor(了解)
@RequiredArgsConstructor
是 Lombok 库中的一个注解,它会自动生成一个包含所有需要特殊处理(例如,需要使用 final 修饰符或@NonNull注解)的参数的构造函数。当你在类上添加 @RequiredArgsConstructor
注解时,Lombok 会根据类的字段生成一个构造函数,该构造函数的参数是使用final关键字修饰的参数或使用@NonNull注解的参数。
2.7 @AllArgsConstructor
@AllArgsConstructor
是 Lombok 库中的一个注解,用于自动生成一个包含所有字段的构造函数。当你在类上添加 @AllArgsConstructor
注解时,Lombok 会为该类生成一个包含所有字段的构造函数。这个构造函数会使用参数的名字作为参数的名称。
2.8 @Data(最常用)
@Data
是 Lombok 库中的一个注解,它为 Java 类自动生成 getter、setter 方法、toString() 方法、equals()、hashCode() 和 和特殊处理(使用 final 修饰符或@NonNull注解)的参数的构造函数。通过在类上添加 @Data
注解,Lombok 会根据类的字段生成这些方法。
具体来说,@Data
注解包含以下四个子注解:
@Getter
和@Setter
:为类的字段生成 getter 和 setter 方法。@ToString
:为类生成 toString() 方法,该方法返回类的实例的字符串表示形式。@EqualsAndHashCode
:为类生成 equals() 和 hashCode() 方法。@RequiredArgsConstructor
:为类生成一个包含所有需要特殊处理(使用 final 修饰符或@NonNull注解)的参数的构造函数。
请注意,如果你使用 @Data
注解,Lombok 会自动生成这些方法,而无需手动编写这些代码。
@Data
public class User {
private String name;
private int age;
}
2.9 @Builder(炫技必备,链式编程)
@Builder
是 Lombok 库中的一个注解,用于自动生成一个 builder 类。通过在类上添加 @Builder
注解,Lombok 会为该类生成一个 builder 类,该 builder 类具有用于设置每个字段的 setter 方法以及一个用于创建最终对象的 build() 方法。
使用 @Builder
注解可以简化代码,并使代码更易于阅读和维护。它使得代码更加清晰明了,避免了手动编写 builder 类的繁琐过程。
周式概括:在实体类上使用@Builder注解后,在实体类中会生成一个builder()方法,该方法用于return一个对应的builder类(构造器)。在构建器中,实体类中的每个参数,都会对应创建类似于 setter 的方法,方法名与该参数名相同,并且返回值是构建器本身(便于链式调用)。还会提供一个会build 方法,return实体类对象。
@Builder
public class User {
private String username;
private String password;
}
编译后
public class User {
private String username;
private String password;
User(String username, String password) {
this.username = username;
this.password = password;
}
public static User.UserBuilder builder() {
return new User.UserBuilder();
}
public static class UserBuilder {
private String username;
private String password;
UserBuilder() {}
public User.UserBuilder username(String username) {
this.username = username;
return this;
}
public User.UserBuilder password(String password) {
this.password = password;
return this;
}
public User build() {
return new User(this.username, this.password);
}
public String toString() {
return "User.UserBuilder(username=" + this.username + ", password=" + this.password + ")";
}
}
}
1.在实体类中:会创建一个 builder 方法,它的目的是用来创建构建器
2.创建一个名为 ThisClassBuilder 的内部静态类,并具有和实体类相同的属性(称为构建器)
3.在构建器中:对于目标类中的所有的属性和未初始化的 final 字段,都会在构建器中创建对应属性
4.在构建器中:创建一个无参的 default 构造函数
5.在构建器中:实体类中的每个参数,都会对应创建类似于 setter 的方法,方法名与该参数名相同。 并且返回值是构建器本身(便于链式调用)
6.在构建器中:会创建一个 build 方法,调用 build 方法,就会根据设置的值进行创建实体对象
7.在构建器中:会生成一个 toString 方法
USer user = User.builder().username("admin").password("admin).build();
2.10 @Slf4j
@Slf4j
是Lombok库中的一个注解,它可以为Java类自动添加一个名为log
的日志记录器。@Slf4j
注解使用了SLF4J(Simple Logging Facade for Java)日志框架。通过使用@Slf4j
注解,您无需手动创建private static final Logger log = LoggerFactory.getLogger(YourClassName.class)
这样的日志记录器,而是直接使用log
变量进行日志记录。
使用@Slf4j
注解的示例代码如下所示:
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class MyClass {
public void myMethod() {
log.debug("Debug log message");
log.info("Info log message");
log.error("Error log message");
}
}
在上述代码中,通过使用@Slf4j
注解,即可在MyClass
中自动添加一个名为log
的日志记录器。然后,您可以在方法中使用log
变量来记录日志。在示例中,使用了不同的日志级别(debug、info和error)记录不同级别的日志信息。
三、Lombok使用
3.1 引入依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
3.2 安装插件(第一次使用时)
IDEA中File->Settings->Plugins,搜索安装Lombok插件。
3.3 在Java类中使用Lombok注解
在Java类中使用Lombok注解:您可以在需要简化的Java类中使用Lombok的注解来自动生成代码。以下是一些常用的Lombok注解:
通过在类上添加这些注解,Lombok会自动生成相应的代码。
@Getter
/@Setter
: 自动生成字段的getter和setter方法。@ToString
: 自动生成toString()
方法,用于输出对象的字符串表示。@EqualsAndHashCode
: 自动生成equals()
和hashCode()
方法。@NoArgsConstructor
/@RequiredArgsConstructor
/@AllArgsConstructor
: 自动生成无参数构造函数、指定参数的构造函数或包含所有参数的构造函数。@Data
: 是一个组合注解,相当于同时使用了@Getter
、@Setter
、@ToString
、@EqualsAndHashCode、@RequiredArgsConstructor
注解。@Slf4j
: 自动生成日志记录器。