IT袋

当前位置:主页 > 经验教程 > 建站编程 >

详解Lombok的坑

详解Lombok的坑 Lombok使用中需注意的问题(9)

时间:2024-03-25 20:25:01 来源:IT袋 作者:马勇
导读:详解Lombok的坑,它干的事儿就是加载那些被标记为 SCL.lombok 的 class 文件。 然后我是怎么知道 Lombok 是基于编译时注解的呢? 其实这玩意在我看过的两本书里面都有写,有

详解Lombok的坑

详解Lombok的坑

它干的事儿就是加载那些被标记为 SCL.lombok 的 class 文件。

然后我是怎么知道 Lombok 是基于编译时注解的呢?

其实这玩意在我看过的两本书里面都有写,有点模糊的印象,写文章的时候我又翻出来读了一遍。

首先是《深入理解 Java 虚拟机(第三版)》的第四部分程序编译与代码优化的第 10 章:前端编译与优化一节。

里面专门有一小节,说插入式注解的:

详解Lombok的坑

Lombok 的主要工作地盘,就在 javac 编译的过程中。

在书中的 361 页,提到了编译过程的几个阶段。

从 Java 代码的总体结构来看,编译过程大致可以分为一个准备过程和三个处理过程:

  • 1.准备过程:初始化插入式注解处理器。
  • 2.解析与填充符号表过程,包括:
    • 词法、语法分析。将源代码的字符流转变为标记集合,构造出抽象语法树。
    • 填充符号表。产生符号地址和符号信息。
  • 3.插入式注解处理器的注解处理过程:插入式注解处理器的执行阶段,本章的实战部分会设计一个插入式注解处理器来影响Javac的编译行为。
  • 4.分析与字节码生成过程,包括:
    • 标注检查。对语法的静态信息进行检查。
    • 数据流及控制流分析。对程序动态运行过程进行检查。
    • 解语法糖。将简化代码编写的语法糖还原为原有的形式。(java中的语法糖包括泛型、变长参数、自动装拆箱、遍历循环foreach等,JVM运行时并不支持这些语法,所以在编译阶段需要还原。)
    • 字节码生成。将前面各个步骤所生成的信息转换成字节码。

如果说 javac 编译的过程就是 Lombok 的工作地盘,那么其中的“插入式注解处理器的注解处理过程”就是它的工位了。

书中也提到了 Lombok 的工作原理:

详解Lombok的坑

第二本书是《深入理解 JVM 字节码》,在它的第 8 章,也详细的描述了插件化注解的处理原理,其中也提到了 Lombok:

相关阅读