tomcat不调用自定义注释处理器。以下是我正在使用的Annotation处理器代码:
@SuppressWarnings("restriction")
@SupportedAnnotationTypes("io.strati.rs.cxf2.bindings.MyAnnotation")
@SupportedSourceVersion( SourceVersion.RELEASE_8 )
public class SimpleAnnotationProcessor extends AbstractProcessor {
public static List<String> str = new ArrayList<>();
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
System.out.println("Into annotation processor ... 2");
for ( Element element : roundEnv.getElementsAnnotatedWith(MyAnnotation.class)) {
System.out.println("Method name is:"+element.getSimpleName());
str.add(element.getSimpleName().toString());
}
return false;
}
}
这将存储具有自定义注释的所有方法的方法名称。这就是注释类的样子:
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(value = RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}
我正在尝试访问tomcat应用程序中的列表,如下所示:
@GET
@Path("/dummy")
@MyAnnotation
@Produces({APPLICATION_JSON, APPLICATION_XML, TEXT_XML})
public void print(){
System.out.println("List is:"+SimpleAnnotationProcessor.str);
}
即使该方法具有注释,列表也会打印为空。我已在maven编译器插件中指定了注释,并在META-INF / services / javax.annotation.processing.Processor中指定了注释。有人能告诉我注释处理器没有被调用的可能原因是什么?
答案 0 :(得分:1)
我怀疑Tomcat与它有什么关系。注释处理在编译时进行,通常用于生成或修改代码。注释处理器可以看作是编译器插件。
https://www.javacodegeeks.com/2015/09/java-annotation-processors.html
遵循保留策略,Java编译器将在编译阶段在类文件中保留注释,但在运行时它不会(也不应该)可用。
注释处理器可能实际上是将print()方法名称添加到列表中(检查构建输出),但这只会在编译代码时发生。
运行时部署的Web服务永远不会在编译时看到处理器填充的列表,这些是完全不同的环境。