首页 > 技术文章 > 三十章:集成lombok

HuiShouGuoQu 2021-02-02 15:07 原文

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

推荐阅读