鉴于此注释:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Interceptor {
Class<? extends Behaviour> value();
}
my library的用户可以扩展其API,创建带有@Interceptor
注释的自定义注释,如下所示:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Interceptor(BypassInterceptor.class)
public @interface Bypass {
}
AbstractProcessor提供了一个名为getSupportedAnnotationTypes的方法,该方法返回处理器支持的注释类型的名称。但是如果我指定@Interceptor
的名称,如下所示:
@Override public Set<String> getSupportedAnnotationTypes() {
Set<String> annotations = new LinkedHashSet();
annotations.add(Interceptor.class.getCanonicalName());
return annotations;
}
当使用@Bypass
注释对类进行注释时,不会通知处理器#进程方法。
因此,当使用抽象处理器时,如何声明注释的目标是另一个注释?
您应该在处理器上使用@SupportedAnnotationTypes
注释,而不要覆盖getSupportedAnnotationTypes()
方法,例如:
@SupportedAnnotationTypes({"com.test.Interceptor"})
public class AnnotationProcessor extends AbstractProcessor {
...
P-rocessor.get的方法可以根据这个注解的值来构造它的结果,就像AbstractProcessor.get的方法一样。
Javadoc:
https://docs.oracle.com/javase/8/docs/api/javax/annotation/processing/SupportedAnnotationTypes.html
如果注释处理器正在扫描使用注释进行元注释的所有注释,则需要为支持的注释类型指定"*"
,然后检查每个注释的声明(使用ProcessingEnvironment.getElements()
确定它是否具有感兴趣的元注释。
null > (Docs) +javax包因此看起来是未来的证明 -是JEE的一部分,而不是JSE的一部分。在JSE中,需要导入其他库。 -静态分析工具不支持(仅运行时验证) (docs) -外部库,而不是包 -自findbugs版本3.x以来已不推荐使用 +用于静态分析(由findbugs和Sonar使用) (docs) +用于静态分析(在findbugs中) -JSR-305在fb邮件列表中显
我有两个包com.a.b.c和com.x.y.z。在com.a.b2.c中,我定义了这样一个组件: 在com.x.y.z中,我有一个类,我想像这样注入我的ClassA: 我需要做什么样的配置更改才能将我的类注入到我的其他类中?现在我得到了构建错误 org.springframework.beans.factory。NoSuchBeanDefinitionException:未找到依赖项的[com.
我正在使用泽西提议做一个网络服务。 我想做的是一个@Post方法,它通过表单接收3个参数,通过url接收1个参数。 但当我这样做时,我从eclipse得到一个警告:在使用javax的方法中只允许一个未注释的参数。ws。rs.POST注释。当执行时,我得到下一个错误: 消息java。lang.IllegalStateException:当请求实体的内容类型不是application/x-www-fo
以某种方式“释放”类
通常,当我在Kotlin代码中使用Java库中的注释时,我必须指定target以指定编译代码中必须注释的元素: 而不是指定,我希望能够简单地使用,特别是如果它发生在许多地方。 问题:有没有一种方法可以提示Kotlin编译器在所有位置使用不同的目标,这样如果我使用,它就会像处理一样处理它?或者有没有其他方法可以省略指定目标?如何实现这一目标?是否可以在编译阶段通过注释处理完成(像Lombok那样)?