当前位置: 首页 > news >正文

注解处理器(Annotation Processor)的定义与作用

1. 注解处理器(Annotation Processor)的定义与作用

定义

注解处理器是 Java 编译器的一种工具(javax.annotation.processing.Processor接口的实现类),它在编译期扫描和处理源代码中的注解(Annotation),并根据注解逻辑生成新的 Java 代码、资源文件或执行其他编译期操作。

作用

  • 代码生成:根据注解自动生成重复或模板化代码(如 Lombok 通过@Data生成 getter/setter,MyBatis 通过@Mapper生成代理类),减少手动编码。
  • 编译期校验:对注解标记的代码进行合法性检查(如 Lombok 验证@NonNull参数非空,Dagger 检查依赖注入是否完整),提前暴露错误。
  • 元数据处理:提取注解携带的元数据,用于生成配置文件、文档或其他编译产物。

2. 在 pom.xml 中配置注解处理器并定义执行顺序

Maven 中通过maven-compiler-plugin配置注解处理器,可指定处理器类路径及执行顺序。

配置示例(以 Lombok 为例):

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><!-- 配置注解处理器路径 --><annotationProcessorPaths><!-- 第一个处理器:Lombok --><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></path><!-- 第二个处理器:其他处理器(如MapStruct) --><path><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>1.5.3.Final</version></path></annotationProcessorPaths><!-- 强制指定处理器执行顺序(按声明顺序执行) --><compilerArgs><arg>-processor</arg><arg>lombok.launch.AnnotationProcessorHider$AnnotationProcessor,org.mapstruct.ap.MappingProcessor</arg></compilerArgs></configuration></plugin></plugins>
</build>

执行顺序说明:

  • annotationProcessorPaths中声明的处理器默认按顺序执行,但部分编译器可能不严格遵循,建议通过-processor参数显式指定全类名顺序(用逗号分隔),确保先执行的处理器生成的代码能被后续处理器使用(如 Lombok 生成的 getter 需被 MapStruct 引用)。

3. 注解处理器的执行时机

注解处理器在 **Java 编译期的 “注解处理阶段”** 执行,具体时机如下:
  1. 编译器解析源代码,收集所有注解信息。
  2. 调用注解处理器的process()方法,传入注解相关的语法树(AST)。
  3. 处理器处理注解,生成新的 Java 代码(如.java文件)。
  4. 新生成的代码会被重新加入编译流程,重复上述步骤(支持增量处理),直到没有新代码生成。
  5. 所有处理器执行完毕后,编译器进入字节码生成阶段,编译所有源代码(包括手动编写和自动生成的)。
关键特点:处理器仅在编译期运行,不影响运行时性能;生成的代码与手动编写的代码同等参与编译。

总结

  • 注解处理器是编译期工具,核心作用是代码生成和编译期校验。
  • Maven 中通过maven-compiler-pluginannotationProcessorPaths-processor参数配置处理器及执行顺序。
  • 执行时机为编译期的注解处理阶段,支持增量处理生成的代码。
http://www.jsqmd.com/news/22145/

相关文章:

  • uniapp h5下pwa模式缓存问题
  • 别慌!恢复已删除数据的 10 个卓越技巧,小白也能会
  • 删除“幽灵依赖”文件,如何删除残留文件
  • CRMEB的PHP版本跨域问题
  • 2025 医疗级胶水厂家最新推荐榜单:权威测评 + 实力厂家甄选,聚焦合规性与技术创新
  • NUIST-OOP-Lab02
  • 2025 年最新推荐!国内球墨铸铁管厂家排行榜:涵盖离心 / 市政 / 防腐 / 给水 / 水利工程用,助力工程高效选材
  • DHCP 泛洪攻击小实验
  • 2025 年热转印花膜优质厂家最新推荐排行榜:聚焦产品质量与客户满意度,涵盖硅胶 / 五金 / 塑胶等多材质应用场景
  • 2025 年国内除湿机厂家最新推荐排行榜:工业 / 家用场景优质品牌精选指南仓库 / 大型 / 车间除湿机公司推荐
  • 题解:P13611 [NWRRC 2022] New Time
  • 2025 年模板加固源头厂家最新推荐榜:优质企业权威测评出炉,含高精 / 剪力墙等多类型模板加固品牌
  • 102302155张怡旋数据采集第一次作业
  • 序列异或求贡献
  • 深入解析:Java外功精要(2)——Spring IoCDI
  • 2025年矩形橡胶支座源头厂家权威推荐榜单:GJZ矩形橡胶支座/圆形橡胶桥梁支座/桥梁橡胶支座源头厂家精选
  • 2025年永磁同步变频器加工厂权威推荐榜单:高压变频柜装置/通用矢量变频器/高压变频器源头厂家精选
  • 首批CCF教学案例大赛资源上线:涵盖控制仿真、算法与机器人等9大方向 - 教程
  • HT-PBR-0006SMG:20W 连续、3 相位失衡,一颗贴片省掉整块匹配网络
  • 2025年人字纹机织布源头厂家权威推荐榜单:700g机织布/锦纶工业用布/800g机织布源头厂家精选
  • 双模更超模!飞利浦双模办公娱乐显示器27E2N5900RW优雅登场! - 实践
  • Day4无序,有序和定义列表
  • 技术管理
  • 威胁狩猎平台升级:全新认证机制与功能增强
  • SpringMVC 启动与请求处理流程解析 - Higurashi
  • 精读C++20设计模式——结构型设计模式:享元模式 - 实践
  • Java 企业 AI 转型选什么?JBoltAI 框架:20 + 大模型 + 向量数据库,AI 应用超灵活
  • 20232401 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 2025 年破胶机厂家最新推荐排行榜:聚焦 610/710/810 型及大型自动低温环保设备,精选优质企业
  • 实用指南:音视频学习(六十七):音视频像素格式