Lombok介绍
近来偶遇一款撸码神器,介绍给大家~相信许多小伙伴都深有体会,POJO类中的千篇一律的getter/setter,constructor等方法让人写的揪心,那么今天就有一种方法可以残暴的解决这个问题。接下来为大家介绍这款神器:Lombok以下是官方对Lombok的介绍
Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.Project Lombok是一个java库,它可以自动插入编辑器和构建工具,为java增色。永远不要再编写另一个getter或equals方法,使用一个注释,您的类就有了一个功能齐全的构建器、自动记录变量等等。
简而言之,Lombok实现的效果就是通过简单的注解来精简代码达到消除冗长代码的目的。
Lombok优点及缺点
对Lombok有了一个基本的认识之后,让我们来挖掘一下它的优缺点。首先看一下它的优点。
提高编码效率
使代码更简洁
消除冗长代码
避免修改字段名字时忘记修改方法名
提高下逼格
以上就是Lombok的优点,当然,Lombok的优点远远不止以上几点,使用Lombok,你可以更加优雅高效的编辑代码。但,俗话说“有利必有弊”,Lombok为我们带来便利的同时也带来的不少小麻烦。
Lombok需要额外的环境配置(接下来为讲到)
传染性(一旦在resource包里用了lombok,别人想看源码也不得不装插件)
降低代码可读性
虽然Lombok有着不少缺点,但总归是利大于弊,作为一款优秀的神器,仍然值得我们去学习。
Lombok原理
授人以鱼不如授人以渔,接下来简要介绍一下Lombok的原理。
Sun公司在2005.2.1提交了JSR 269,用于支持在编译期对annotation进行处理,即引入了插入式注解处理API(Pluggable Annotation Processing API)。javac从java6开始支持“JSR 269 API”规范,只要程序实现了该API,就能在javac运行的时候得到调用,而Lombok实现了“JSR 269 API”,在编译时,javac编译源码的具体流程如下:Source File -> Parse -> AST -> Annotation Processing -> Modified AST -> Analyze and Generate -> Byte Code
Lombok引入项目
引入Lombok jar包
在项目中引入Lombok的方法有很多,在此以Maven为例进行讲解,其他途径可以参考官方网站https://projectlombok.org/。打开pom.xml文件,添加以下依赖。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>
IDEA/Eclipse安装Lombok插件
在上面提到,Lombok需要额外的环境配置,此处以IDEA为例进行讲解。
第一步,打开File -> Settings -> Plugins,输入Lombok Plugin点击搜索。
第二步,重启IDE使插件生效。
Lombok实战Coding
完成了上述准备之后,就可以愉快的使用Lombok进行编码了。编码之前首先为大家介绍一下Lombok的基本用法。
@Data包含了 @Getter @Setter @ToString @EqualsAndHashCode即自动为类生成所有getter、setter、toString、eaquals以及hashCode方法@Getter 为所有属性生成public修饰的get方法@Getter(AccessLevel.PROTECTED) 为所有属性生成protected修饰的get方法
@Setter 为所有属性生成public修饰的set方法@Setter(AccessLevel.PROTECTED) 为所有属性生成protected修饰的set方法
@NoArgsConstructor 无参构造器@AllArgsConstructor 生成带有所有属性的有参构造器
@ToString 默认生成带有所有属性的toString方法@ToString(exclude = “column”) 生成除column属性之外的所有属性的toString方法@ToString(exclude = {“column1”, “column2”}) @ToString(of = “column”) 生成只有column属性的toString方法@ToString(of = {“column1”, “column2”})
@EqualsAndHashCode@EqualsAndHashCode(exclude = “column”) 以column属性之外的属性作为是否是相同对象判断的标准@EqualsAndHashCode(of = “column”)) 只以column属性作为是否是相同对象判断的标准
@Slf4j 为当前类生成日志对象@Log4j 为当前类生成日志对象
接下来让我们简单对比一下代码。首先是未经简化的代码。
public class User {
private Integer id;
private String username;
private String password;
private String email;
private String phone;
public User(Integer id, String username, String password, String email, String phone) {
this.id = id;
this.username = username;
this.password = password;
this.email = email;
this.phone = phone;
}
public User() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return Objects.equals(id, user.id) &&
Objects.equals(username, user.username) &&
Objects.equals(password, user.password) &&
Objects.equals(email, user.email) &&
Objects.equals(phone, user.phone);
}
@Override
public int hashCode() {
return Objects.hash(id, username, password, email, phone, question, answer, role, createTime, updateTime);
}
}
接下来是使用Lombok简化后的代码。
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer id;
private String username;
private String password;
private String email;
private String phone;
}
Lombok的更多用法,在此不再赘述,等待大家去慢慢发掘。
Lombok工作中需要注意的点
Lombok虽然好用,但推荐大家选择适合的地方使用Lombok,例如POJO是一个好地方,因为POJO很单纯。
彩蛋
反编译大法
如果有小伙伴想要深究Lombok是如何实现插入式注解的,可以利用反编译大法查看源码。在此推荐另一款神兵利器 Java Decompiler。官方网站为:http://java-decompiler.github.io/有以下三种安装方式:
JD-GUI 图形化客户端
JD-Eclipse eclipse插件
JD-IntelliJ idea插件
安装完成后可以通过Java Decompiler验证Class文件。
发表回复