三十章:集成lombok
1.用处
lombok 提供了简单的注解的形式
来帮助我们消除一些必须有但看起来很臃肿的代码,
比如属性的get/set,及对象的toString等方法,
特别是相对于 POJO
2.SpringBoot里面集成lombok
1.第一步:按照idea插件
打开idea-->
Settings-->
Plugins-->
在输入框输入”lombok”,
得到搜索结果,选择第二个,
点击安装,然后安装提示重启IDEA,安装成功;
第二步:添加依赖(这里是举例是maven)
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.6</version>
</dependency>
3.常用的注解说明
@Data:
注解在类上;提供类所有属性的getting和setting方法,
此外还提供了equals、canEqual、hashCode、toString 方法
@Setter:
注解在属性上;为属性提供setting 方法
@Getter:
注解在属性上;为属性提供getting 方法
@Log4j :
注解在类上;为类提供一个属性名为log 的 log4j 日志对象
@NoArgsConstructor:
注解在类上;为类提供一个无参的构造方法
@AllArgsConstructor:
注解在类上;为类提供一个全参的构造方法
官网:http://jnb.ociweb.com/jnb/jnbJan2010.html
4.JSR 269 Pluggable Annotation Processing API规范
自从Java6起,javac就支持“JSR 269 Pluggable Annotation Processing API”规范,
只要程序实现了该API,就能在javac运行的时候得到调用。
举例来说,现在有一个实现了"JSR 269 API"的程序A,
那么使用javac编译源码的时候具体流程如下: 1)javac对源代码进行分析,生成一棵抽象语法树(AST) 2)运行过程中调用实现了"JSR 269 API"的A程序 3)此时A程序就可以完成它自己的逻辑,包括修改第一步骤得到的抽象语法树(AST) 4)javac使用修改后的抽象语法树(AST)生成字节码文件
5.lombok原理
1.概述:
Lombok这款插件依靠可插件化的Java自定义注解处理
API(JSR 269: Pluggable Annotation Processing API)
来实现在Javac编译阶段利用“Annotation Processor”
对自定义的注解进行预处理后生成真正在JVM上面执行的“Class文件”。
如图
从上面的这个原理图上可以看出Annotation Processing是
编译器在解析Java源代码和生成Class文件之间的一个步骤。
其中Lombok插件具体的执行流程如下:
2.过程描述
lombok本质上就是这样的一个实现了"JSR 269 API"的程序。
在使用javac的过程中,它产生作用的具体流程如下:
1)javac对源代码进行分析,生成一棵抽象语法树(AST)
2)运行过程中调用实现了"JSR 269 API"的lombok程序
3)此时lombok就对第一步骤得到的AST进行处理,
找到@Data注解所在类对应的语法树(AST),
然后修改该语法树(AST),增加getter和setter方法定义的相应树节点
4)javac使用修改后的抽象语法树(AST)生成字节码文件
6.上线部署时lombok问题
根据原理可以看出
打包部署class后,get/set是存在的,
所以不存在问题,可以反编译看看
学习来源:
Java开发神器Lombok的使用与原理 - 简书 (jianshu.com)
https://www.jianshu.com/p/422f151fccd3
Lombok使用及原理分析 - 风雨杳如年 - 博客园 (cnblogs.com)
https://www.cnblogs.com/coderzhw/p/11094315.html
上线部署的问题
https://www.oschina.net/question/947137_2148951?sort=time
jar下载:https://projectlombok.org/download
https://my.oschina.net/iyinghui/blog/1859524