一、lombok是什么?能做什么?
lombok是一个增强java代码的java库,可在java代码编译期间,按照预定自动生成部分java代码。
用途:解放双手,减少不必要的代码或重复代码,增强代码美观性可读性。
二、lombok原理
Lombok本质上就是一个实现了“JSR 269 API”的程序。在使用javac的过程中,首先javac对源代码进行分析,生成了一棵抽象语法树(AST),然后运行过程中调用实现了“JSR 269 API”的Lombok程序,此时Lombok就对第一步骤得到的AST进行处理,找到注解(如@Getter)所在类对应的语法树(AST),然后修改该语法树(AST),增加getter方法定义的相应树节点;javac使用修改后的抽象语法树(AST)生成字节码文件,即给class增加新的节点(代码块)。
三、lombok各注解详解及用法
@Data:用途: 自动生成无参构造方法、属性的getter/Setter方法、重写的equals方法、canEquals方法、重写hashCode方法、重写toString方法。
示例:
@Data
public class User {
private String userName;
private Integer userAge;
}
编译后代码:
public class User {
private String userName;
private Integer userAge;
public User() {
}
public String getUserName() {
return this.userName;
}
public Integer getUserAge() {
return this.userAge;
}
public void setUserName(String userName) {
this.userName = userName;
}
public void setUserAge(Integer userAge) {
this.userAge = userAge;
}
public boolean equals(final Object o) {
if (o == this) return true;
if (!(o instanceof User)) return false;
final User other = (User) o;
if (!other.canEqual((Object) this)) return false;
final Object this$userName = this.getUserName();
final Object other$userName = other.getUserName();
if (this$userName == null ? other$userName != null : !this$userName.equals(other$userName)) return false;
final Object this$userAge = this.getUserAge();
final Object other$userAge = other.getUserAge();
if (this$userAge == null ? other$userAge != null : !this$userAge.equals(other$userAge)) return false;
return true;
}
protected boolean canEqual(final Object other) {
return other instanceof User;
}
public int hashCode() {