当前位置: 首页 > 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.hskmm.com/?act=detail&tid=38856

相关文章:

  • 2025 年热转印花膜优质厂家最新推荐排行榜:聚焦产品质量与客户满意度,涵盖硅胶 / 五金 / 塑胶等多材质应用场景
  • 2025 年国内除湿机厂家最新推荐排行榜:工业 / 家用场景优质品牌精选指南仓库 / 大型 / 车间除湿机公司推荐
  • 题解:P13611 [NWRRC 2022] New Time
  • 第1期(两题)
  • NUIST-OOP-Lab02
  • 快速平方根取倒数算法
  • MinIO 介绍(4)--Java 操作 MinIO
  • 团队管理
  • DHCP 泛洪攻击小实验
  • 2025年家装电缆工厂权威推荐榜单:光伏电缆/阻燃电缆/电线电缆源头厂家精选
  • 2025年道路裂缝密封胶生产厂家权威推荐榜单:道路专用密封胶/混凝土路面灌缝胶/聚氨酯灌缝胶源头厂家精选
  • 2025 年模板加固源头厂家最新推荐榜:优质企业权威测评出炉,含高精 / 剪力墙等多类型模板加固品牌
  • 102302155张怡旋数据采集第一次作业
  • 2025年人字纹机织布源头厂家权威推荐榜单:700g机织布/锦纶工业用布/800g机织布源头厂家精选
  • 2025年永磁同步变频器加工厂权威推荐榜单:高压变频柜装置/通用矢量变频器/高压变频器源头厂家精选
  • Day4无序,有序和定义列表
  • 刷题日记—数组练习-幻方
  • IT运维工程师的起源与发展
  • JBoltAI:解锁Java团队的AI开发潜能,引领产业数智化升级新浪潮
  • SpringMVC 启动与请求处理流程解析 - Higurashi
  • Java 企业 AI 转型选什么?JBoltAI 框架:20 + 大模型 + 向量数据库,AI 应用超灵活
  • 20232401 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • JBoltAI:企业级 Java AI 应用开发框架
  • 告别 AI 开发 “瞎折腾”!JBoltAI 框架帮 Java 团队提速,AI 应用落地快人一步
  • 软件技术基础第二次作业
  • Log4Net配置文件参考
  • 2025年8座旅游观光车供应商权威推荐榜单:11座旅游观光车/景区观光车/燃油观光车源头厂家精选
  • 2025 年健身器材品牌最新推荐排行榜:权威测评揭晓家用商用高口碑品牌及选购指南商用 / 单位 / 家庭 / 有氧 / 力量健身器材推荐
  • 2025 年最新推荐!工业 / 防爆 / 低温 / 水冷 / 螺杆 / 超低温等多类型冷水机定制厂家榜单,助力企业精准选择高效制冷品牌
  • 2025年红木家具厂家权威推荐榜:交趾黄檀/小叶紫檀/巴里黄檀/缅甸花梨/阔叶黄檀,明清古典榫卯工艺高端定制全屋整装,白胚烘干源头工厂精选