lombok简化java 代码提高效率

文章目录
  1. 1. lombok 注解
  2. 2. 原理分析
  3. 3. lombok 优缺点
    1. 3.1. 优点
    2. 3.2. 缺点
  4. 4. 总结
    1. 4.1. 知乎上有位大神发表过对Lombok的一些看法

今天 github 看了一个项目代码,发现运行没有问题,但是idea 一直报错,实体没有生成对应的 get,set方法,这里很疑惑,它究竟是怎么运行起来的呢?然后发现它的实体有个@Data 的注解,然后查阅资料才发现是一个插件lombok简化了代码

使用 idea 的时候会报错,应该安装lombok插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.lombok;

import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;

@Data
public class Student {
String name;
int sex;
Integer age;
String address;
List<String> books;
}

lombok 注解

  • @Data :注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、 hashCode、toString 方法
  • @Setter:注解在属性上;为属性提供 setting 方法
  • @Getter:注解在属性上;为属性提供 getting 方法
  • @Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
  • @NoArgsConstructor:注解在类上;为类提供一个无参的构造方法
  • @AllArgsConstructor:注解在类上;为类提供一个全参的构造方法

原理分析

自从Java 6起,javac就支持“JSR 269 Pluggable Annotation Processing API”规范,只要程序实现了该API,就能在javac运行的时候得到调用。

lombok本质上就是这样的一个实现了”JSR 269 API”的程序。在使用javac的过程中,它产生作用的具体流程如下:

image.png

  1. javac对源代码进行分析,生成一棵抽象语法树(AST)
  2. 运行过程中调用实现了”JSR 269 API”的lombok程序
  3. 此时lombok就对第一步骤得到的AST进行处理,找到@Data注解所在类对应的语法树(AST),然后修改该语法树(AST),增加getter和setter方法定义的相应树节点
  4. javac使用修改后的抽象语法树(AST)生成字节码文件

lombok 优缺点

优点

  1. 能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,提高了一定的开发效率
  2. 让代码变得简洁,不用过多的去关注相应的方法
    属性做修改时,也简化了维护为这些属性所生成的getter/setter方法等

缺点

  1. 不支持多种参数构造器的重载
  2. 虽然省去了手动创建getter/setter方法的麻烦,但大大降低了源代码的可读性和完整性,降低了阅读源代码的舒适度

总结

知乎上有位大神发表过对Lombok的一些看法

这是一种低级趣味的插件,不建议使用。JAVA发展到今天,各种插件层出不穷,如何甄别各种插件的优劣?能从架构上优化你的设计的,能提高应用程序性能的 ,
实现高度封装可扩展的…, 像lombok这种,像这种插件,已经不仅仅是插件了,改变了你如何编写源码,事实上,少去了代码你写上去又如何?
如果JAVA家族到处充斥这样的东西,那只不过是一坨披着金属颜色的屎,迟早会被其它的语言取代。

虽然话糙但理确实不糙,试想一个项目有非常多类似Lombok这样的插件,个人觉得真的会极大的降低阅读源代码的舒适度。

评论