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

它干的事儿就是加载那些被标记为 SCL.lombok 的 class 文件。
然后我是怎么知道 Lombok 是基于编译时注解的呢?
其实这玩意在我看过的两本书里面都有写,有点模糊的印象,写文章的时候我又翻出来读了一遍。
首先是《深入理解 Java 虚拟机(第三版)》的第四部分程序编译与代码优化的第 10 章:前端编译与优化一节。
里面专门有一小节,说插入式注解的:

Lombok 的主要工作地盘,就在 javac 编译的过程中。
在书中的 361 页,提到了编译过程的几个阶段。
从 Java 代码的总体结构来看,编译过程大致可以分为一个准备过程和三个处理过程:
- 1.准备过程:初始化插入式注解处理器。
- 2.解析与填充符号表过程,包括:
- 词法、语法分析。将源代码的字符流转变为标记集合,构造出抽象语法树。
- 填充符号表。产生符号地址和符号信息。
- 3.插入式注解处理器的注解处理过程:插入式注解处理器的执行阶段,本章的实战部分会设计一个插入式注解处理器来影响Javac的编译行为。
- 4.分析与字节码生成过程,包括:
- 标注检查。对语法的静态信息进行检查。
- 数据流及控制流分析。对程序动态运行过程进行检查。
- 解语法糖。将简化代码编写的语法糖还原为原有的形式。(java中的语法糖包括泛型、变长参数、自动装拆箱、遍历循环foreach等,JVM运行时并不支持这些语法,所以在编译阶段需要还原。)
- 字节码生成。将前面各个步骤所生成的信息转换成字节码。
如果说 javac 编译的过程就是 Lombok 的工作地盘,那么其中的“插入式注解处理器的注解处理过程”就是它的工位了。
书中也提到了 Lombok 的工作原理:

第二本书是《深入理解 JVM 字节码》,在它的第 8 章,也详细的描述了插件化注解的处理原理,其中也提到了 Lombok:
相关阅读
-
DNS服务器未响应怎么解决? DNS未响应最简单的修复办法
今天小编介绍DNS服务器未响应怎么解决的电脑方面的小经验,接下来IT袋网带大家一起了解。 DNS服务器未响应是一种常见的网络问题,可能导致无法访问网站或网络服务。 DNS(域名系统)负责
-
Nacos核心功能点有哪些 "Nacos的关键功能有哪些?"
本文为您带来的是Nacos核心功能点有哪些的内容,接下来小编为网友介绍。 服务注册: Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等
-
Kafka为什么这么快? 为何卡夫卡如此迅猛?
如果想了解Kafka为什么这么快方面的知识,具体详情如下: 深入地从 IO、线程、数据结构、编码等方面剖析了Redis “快”的内部秘密。 下面不念讲一讲Kafka性能优化方面的知识,不念决定将这
-
怎么注册自己的网站域名账号 申请域名网址的流程
一篇很详细的教程是关于怎么注册自己的网站域名账号和申请域名网址的流程的IT知识,下面为详细的介绍。 注册域名的一般流程是什么?个人申请域名流程需要知道哪些? 一、域名注册流程


