鉴于此注释:
@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
以某种方式“释放”类
我在将包含一些自定义方面的实用程序jar文件导入到另一个项目中遇到了一些困难。需要注意的是,我没有在这个项目中使用Spring,因为我的客户对Spring有些反感。 我已经创建了一个概念验证(下面是完整的代码示例)。当我在utility jar中运行测试运行器时,任何用AspectJ注释注释的方法都可以很好地执行它们的方面。当我在另一个项目中使用相同的jar时,这些方面被忽略了。