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

news/2025/10/25 15:45:26/文章来源:https://www.cnblogs.com/liftsail/p/19165485

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.mzph.cn/news/946208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp h5下pwa模式缓存问题

当我们把h5添加到桌面后,有新的版本更新上去,在网页h5打开是更新了最新版本,但在添加到桌面后的伪应该上没有更新到最新代码 这是有关于Service Worker机制的问题,它是浏览器后台的一个脚本,能拦截和处理网络请求…

别慌!恢复已删除数据的 10 个卓越技巧,小白也能会

我们都知道如今的数据恢复服务有多么出色。但有时我们仍然需要一些更便捷的工具来自行恢复数据。 这时,付费最高的数据恢复软件就派上用场了。这些软件无疑是解决所有数据丢失问题最智能、最快捷的解决方案。 现在,由…

删除“幽灵依赖”文件,如何删除残留文件

如何操作:创建临时H盘并删除文件 以下是具体的步骤,我们可以通过创建一个指向空文件夹的虚拟驱动器来实现:创建一个空文件夹作为“磁盘”的载体在任何一个剩余空间充足的盘(比如C盘或D盘)根目录下,新建一个文件夹…

CRMEB的PHP版本跨域问题

1. /config/cookie.php修改为 return [expire => 0,path => /,domain => ,secure => false,httponly => false,setcookie => true,// 正确的 CORS 头(开发环境)header => [A…

2025 医疗级胶水厂家最新推荐榜单:权威测评 + 实力厂家甄选,聚焦合规性与技术创新

引言 医疗级胶水作为医疗器械核心配套材料,其品质直接关联诊疗安全。据中国胶粘剂和胶粘带工业协会 2025 年 Q3 测评数据显示,国内医疗级胶水市场合规产品仅占 72%,35% 的采购纠纷源于粘结强度不达标或认证缺失。为…

NUIST-OOP-Lab02

🧪 实验报告 一、实验名称 现代C++编程初体验 二、实验目的加深对OOP概念(类、对象)和特性(封装)的理解 会用C++正确定义、实现、测试类;会创建对象,并基于对象编程 加深对C++内存资源管理技术的理解,能够解释…

2025 年最新推荐!国内球墨铸铁管厂家排行榜:涵盖离心 / 市政 / 防腐 / 给水 / 水利工程用,助力工程高效选材

引言 在基础设施建设领域,球墨铸铁管是供水、排水、燃气输送工程的核心建材。为精准推荐优质品牌,中国建筑金属结构协会管道分会联合行业权威机构开展 2025 年度测评,测评覆盖国内 68 家主流球墨铸铁管企业,从产品…

Paper: Learning Affordances at Inference-Time for Vision-Language-Action Models

**中文标题:** 视觉-语言-动作模型的推理时间可供性学习 **作者机构:** Ameesh Shah, William Chen, Adwait Godbole, Federico Mora, Sanjit A. Seshia, Sergey Levine, (加州大学伯克利分校) **论文地址:** https…

DHCP 泛洪攻击小实验

DHCP 泛洪攻击攻击原理:通过虚拟随机生成的mac 地址占用DHCP 服务器中的地址池,达到正常机器无法获取到IP 地址从而无法上网DHCP 协议原理DHCP 是为了解决静态IP 地址,每次都需要进行手动输入IP的不方便 DHCP 客户端…

2025 年热转印花膜优质厂家最新推荐排行榜:聚焦产品质量与客户满意度,涵盖硅胶 / 五金 / 塑胶等多材质应用场景

引言 随着热转印行业规模持续扩大,热转印花膜作为关键装饰材料,市场需求年增长率达 18%(数据来源:中国热转印行业协会 2024 年度报告)。为帮助采购者精准筛选优质厂家,本次榜单由中国热转印行业协会联合第三方检…

2025 年国内除湿机厂家最新推荐排行榜:工业 / 家用场景优质品牌精选指南仓库 / 大型 / 车间除湿机公司推荐

引言 当前,无论是工业生产中的仓库货物存储、商业运营里的地下空间环境维护,还是家庭生活中的室内防潮需求,对除湿机的依赖度都日益提升。但除湿机市场品牌繁杂,产品性能差异大,部分产品存在除湿效率低、能耗高、…

题解:P13611 [NWRRC 2022] New Time

非常简单一模拟,使我小脑旋转 题目传送门 思路 首先想到的就是把题目给定的字符串转换为整数,我们可以枚举字符串的每一位,在遇到 : 前,将对应的数字加到表示小时的变量上,遇到 : 后,将对应的数字加到表示分钟的…

第1期(两题)

请注意:样例不一定正确(发现问题、知道解法必关)星际旅行 题目描述 宇宙中有\(n\)个星系,每个星系\(i\)有能量值\(e_i\)。存在\(m\)条双向虫洞,连接\(u\)和\(v\)星系,使用虫洞\(u→v\)需消耗能量c,并获得\(d\)的…

门店运营成本高企?AI智能解决方案助力降本增效 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Paper: Diffusion Transformers with Representation Autoencoders

**1 Diffusion Transformers with Representation Autoencoders** **中文标题:** 带有表征自动编码器的扩散 Transformer **作者机构:** Boyang Zheng, Nanye Ma, Shengbang Tong, Saining Xie. New York University…

2025 年模板加固源头厂家最新推荐榜:优质企业权威测评出炉,含高精 / 剪力墙等多类型模板加固品牌

引言 在建筑工程质量与效率要求不断提升的当下,模板加固产品的选择对工程安全、成本控制至关重要。为帮助行业筛选优质源头厂家,中国建筑金属结构协会联合建筑模板脚手架专业委员会开展 2025 年度模板加固品牌测评,…

102302155张怡旋数据采集第一次作业

作业一 核心代码与运行结果大体思路:在写代码之前我先进入了该网页查看源代码的信息,了解了html的结构分布等,再进行代码的编写。代码首先用requests发送 GET 请求,添加User-Agent模拟浏览器,避免反爬拦截;接着检…

序列异或求贡献

序列异或求贡献是一类常见的题目,经典做法无非是求前后缀,按进制位拆贡献累计答案,但是需要对具体问题具体分析。 异或和之和 设前缀异或和为 \(sum_i\)(\(sum_0\)=0),对 \(sum_i\) 二进制拆位。\(tot1_k\) 为二…

深入解析:Java外功精要(2)——Spring IoCDI

深入解析:Java外功精要(2)——Spring IoC&DIpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

2025年矩形橡胶支座源头厂家权威推荐榜单:GJZ矩形橡胶支座/圆形橡胶桥梁支座/桥梁橡胶支座源头厂家精选

在交通基础设施建设持续发展的背景下,矩形橡胶支座作为桥梁结构的关键传力部件,其质量直接关系到整体工程的安全性与耐久性。 矩形橡胶支座主要由多层薄钢板与橡胶片叠合而成,通过钢板约束橡胶的横向变形,从而显著…