lombok基于jsr 269注解处理器在javac编译期修改ast,直接向类节点注入getter等方法,不生成新文件;ide需启用注解处理,构建工具需配置provided依赖,运行时零开销。

是的,Lombok 插件底层正是基于 Java 的注解处理器(Annotation Processor)机制,在编译期修改抽象语法树(AST)来实现代码增强。
核心依赖 JSR 269 注解处理 API
Lombok 实现了 javax.annotation.processing.Processor 接口,并通过 META-INF/services/javax.annotation.processing.Processor 文件注册自身。当 javac 进入“注解处理阶段”时,会主动加载并调用 Lombok 的处理器(如 lombok.javac.apt.LombokProcessor),而不是等到字节码生成后再做增强。
不是生成新文件,而是直接改 AST
与多数 APT 工具(如 Dagger、MapStruct)不同,Lombok 不生成额外的 .java 源文件,而是在 javac 内部 AST 构建过程中动态插入节点:
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
- 在
Enter阶段后、Attribute(类型检查)阶段前介入 - 扫描带
@Getter、@Data等注解的类或字段 - 向 AST 的类声明节点中添加方法定义(如
getName()、setName(...)) - 后续编译流程将这个被修改过的 AST 正常编译为含完整方法的 .class 文件
IDE 和构建工具需协同支持
因为 AST 修改发生在编译器内部,IDE(如 IntelliJ)必须安装对应 Lombok 插件,并启用注解处理功能,才能在编辑时识别这些“不存在于源码中、但真实存在于字节码里”的方法:
- IntelliJ 中需开启 Settings → Build → Annotation Processors → Enable annotation processing
- Maven/Gradle 要确保
lombok依赖作用域为provided,且编译插件能发现并启用其处理器 - 若 IDE 未加载插件,或构建时禁用了 annotation processing,就会出现“找不到 getter 方法”的编译错误
运行时完全无开销
由于所有方法都在编译期真实写入字节码,不依赖反射、不使用代理、不引入额外运行时依赖。生成的 class 文件与手写代码行为一致,调试、序列化、框架扫描均无感知差异。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










