简介
Lombok是什么?Lombok一个库,可简化许多繁琐的任务并减少Java源代码的冗余长度。
首先在我们未使用Lombok开发时的一个Bean如下所示,代码冗余量很长,这样的代码看起来既没有技术含量,又影响着代码的美观,而且针对每个Bean对象都需要做如此重复的操作。
package com.example.api.User;
import java.util.Objects;
/**
* Created by MisterXie on 2020/4/2
* 个人微信公众号:程序员Hotel
*/
public class Student {
private String name;
private String address;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Student)) return false;
Student student = (Student) o;
return Objects.equals(getName(), student.getName()) &&
Objects.equals(getAddress(), student.getAddress()) &&
Objects.equals(getAge(), student.getAge());
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
", age=" + age +
'}';
}
}
在本文教程中,我们将讨论在最受欢迎的Java IDE,IntelliJ IDEA中对其进行配置及使用。
配置
在IntelliJ IDEA中配置有如下几个步骤
-
进入文件>设置>插件
-
搜索Lombok插件
-
点击安装插件
-
重启IntelliJ IDEA
使用
1.在pom文件中引入lombok的jar包
<!-- lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
2.Bean中使用Lombok注解@Data
package com.example.api.User;
import lombok.*;
/**
* Created by MisterXie on 2020/4/2
* 个人微信公众号:程序员Hotel
*/
@Data
public class Teacher {
private String name;
private String address;
private Integer age;
}
@Data其实是一个组合注解
@ToString,
@EqualsAndHashCode,
@Getter/@Setter,
@RequiredArgsConstructor
即,@Data产生所有其通常与简单的POJO
对于所有字段,设置器为所有非final字段和适当的toString,equals以及hashCode涉及该类字段的实现,以及一个构造函数,该构造函数初始化所有final字段以及所有未标记有初始化程序的非final字段,@NonNull以确保该字段永远不会空值。
所有生成的getter和setter将为public。要覆盖访问级别,请使用显式@Setter和/或@Getter注释对字段或类进行注释。您还可以使用此注释(通过将其与结合使用AccessLevel.NONE)来完全禁止生成getter和/或setter。
标记为的所有字段transient将不被视为hashCode和equals。所有静态字段都将被完全跳过(任何生成的方法都不会考虑,并且不会为它们创建setter / getter)。
@Data可以处理字段的泛型参数。为了减少使用泛型为类构造对象时的样板,可以使用staticConstructor参数生成私有构造函数,以及返回新实例的静态方法。这样,javac将推断变量名称。因此,通过这样声明:@Data(staticConstructor="of") class Foo<T> { private T x;}您可以Foo通过编写:创建新的实例,Foo.of(5);而不必编写:new Foo<Integer>(5);。
3.Bean中使用Lombok注解@Getter和@Setter
@Getter和@Setter当然也可以注释到字段上,
例如:
@Getter @Setter private String name;
因为默认生成的get/set方法是public的,如果要修改方法修饰符可以设置AccessLevel的值,
例如:
@Getter(AccessLevel.PROTECTED) @Setter private String name;
4.Bean中使用Lombok注解@ToString
@Data
@ToString(of = {"name","address"})
public class Teacher {
@Getter(AccessLevel.PROTECTED) @Setter private String name;
private String address;
private Integer age;
}
@ToString可以设置包含哪些字段@ToString(of = {"name","address"})
以及设置不包含哪些字段@ToString(exclude = {"age"})
Lombok的注解有很多,用法大致都相同,在此就不单独介绍使用了。
@Getter and @Setter
@FieldNameConstants
@ToString
@EqualsAndHashCode
@AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor
@Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger, @CustomLog
@Data
@Builder
@SuperBuilder
@Singular
@Delegate
@Value
@Accessors
@Wither
@With
@SneakyThrows
@val
@var
@UtilityClass
微信扫描下方二维码(新开通的个人微信公众号) 更多优质资源及面试文章及时获取 请大家多多支持哦