近日写了一个注解,其中有个属性是字符串的,需要在编译阶段就检查这个值是否合法,于是就写了一个注解处理器(Annotation Processor)。
Java中的注解处理器(Annotation Processor)是一种在编译时期处理注解的工具,它可以通过扫描和解析源代码中的注解信息,生成额外的代码、配置文件或者进行其他特定的处理操作。注解处理器能够帮助开发者实现自定义的代码生成、静态分析、验证等功能,从而提高开发效率和代码质量。
注解处理器的使用方式如下:
1、定义注解:使用Java语言提供的元注解(如@Retention、@Target等)来定义自己的注解。
2、编写注解处理器:实现 javax.annotation.processing.AbstractProcessor抽象类,重写相应的方法来处理注解。
3、配置注解处理器:在META-INF/services目录下创建 javax.annotation.processing.Processor文件,并将注解处理器的全限定名写入其中。
按照上面的步骤完成后编译,报错:服务配置文件不正确, 或构造处理程序对象javax.annotation.processing.Processor: Provider com.xxxx.MyProcessor not found时抛出异常错误。
报这个错误的原因是:
自定义处理器还没有被编译就被调用,所以报 not found
在根据配置寻找自定义的注解处理器时,自定义处理器还未被编译
参考了网上一篇文章的方法已解决这个问题:
1、首先删除META-INF/services/javax.annotation.processing.Processor文件;
2、pom中添加auto-service的依赖:
<dependency>
<groupId>com.google.auto.service</groupId>
<artifactId>auto-service</artifactId>
<version>1.1.1</version>
</dependency>
3、在注解处理器的类上添加一行代码:
@AutoService(Processor.class)
再次编译,问题成功解决。
@AutoService 是Google开源的一个小插件,它可以自动的帮我们生成META-INF/services 的文件,也就不需要你去手动的创建配置文件了。我们打卡jar包,发现在META-INF/services目录下自动生成了 javax.annotation.processing.Processor文件。