IntelliJ IDEA Java高率开发插件Lombok
文章目录
0.前言
在SpringBoot应用中集成Java效率工具Lombok插件,以注释的形式简化Java简单对象(POJO)的代码。
Lombok的Github地址:
Java高率开发插件Lombok—Github地址
1.Lombok插件安装
File->Settings->Plugins->MarketPalce->搜索Lombok并安装
下载后会有提示重启IDEA,安装完成了。
2.Maven中添加依赖Lombok依赖
由于我是用的Maven管理的依赖,写文章时在Maven存储库网站—Lombok中最新版为1.18.10,所以在pom.xml添加如下依赖:
<dependencies>
...
<!-- Java高率开发插件Lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
...
</dependencies>
3.使用Lombok中的常用注释
更多使用可查看官方文档(英文):
常用注解:
@Setter :注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法。
@Getter :使用方法同上,区别在于生成的是getter方法。
@ToString :注解在类,添加toString方法。
@EqualsAndHashCode: 注解在类,生成hashCode和equals方法。
@NoArgsConstructor: 注解在类,生成无参的构造方法。
@RequiredArgsConstructor: 注解在类,为类中需要特殊处理的字段生成构造方法,比如final和被@NonNull注解的字段。
@AllArgsConstructor: 注解在类,生成包含类中所有字段的构造方法。
@Data: 注解在类,生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。
@Slf4j: 注解在类,生成log变量,严格意义来说是常量。
4.查看生成的代码
import lombok.Data;
@Data
public class CustomerBean {
String username;
String password;
}
以@Data为例,看看Lombok为其生成了那些代码,查看target中的对应的class信息
package com.lipiao.traveltreasure.bean;
public class CustomerBean {
String username;
String password;
public CustomerBean() {
}
public String getUsername() {
return this.username;
}
public String getPassword() {
return this.password;
}
public void setUsername(final String username) {
this.username = username;
}
public void setPassword(final String password) {
this.password = password;
}
public boolean equals(final Object o) {
if (o == this) {
return true;
} else if (!(o instanceof CustomerBean)) {
return false;
} else {
CustomerBean other = (CustomerBean)o;
if (!other.canEqual(this)) {
return false;
} else {
Object this$username = this.getUsername();
Object other$username = other.getUsername();
if (this$username == null) {
if (other$username != null) {
return false;
}
} else if (!this$username.equals(other$username)) {
return false;
}
Object this$password = this.getPassword();
Object other$password = other.getPassword();
if (this$password == null) {
if (other$password != null) {
return false;
}
} else if (!this$password.equals(other$password)) {
return false;
}
return true;
}
}
}
protected boolean canEqual(final Object other) {
return other instanceof CustomerBean;
}
public int hashCode() {
int PRIME = true;
int result = 1;
Object $username = this.getUsername();
int result = result * 59 + ($username == null ? 43 : $username.hashCode());
Object $password = this.getPassword();
result = result * 59 + ($password == null ? 43 : $password.hashCode());
return result;
}
public String toString() {
return "CustomerBean(username=" + this.getUsername() + ", password=" + this.getPassword() + ")";
}
}
作为对比,这是没有添加@Data注释前,target中CustomerBean.class的代码:
package com.lipiao.traveltreasure.bean;
public class CustomerBean {
String username;
String password;
public CustomerBean() {
}
}
可以看到多了以下方法:
getUsername()
getPassword()
setUsername(final String username)
setPassword(final String password)
equals(final Object o)
canEqual(final Object other)
hashCode()
toString()