この注釈が与えられた場合:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Interceptor {
Class<? extends Behaviour> value();
}
@Interceptor
私のライブラリのユーザーは、次のように で注釈が付けられたカスタム注釈を作成する API を拡張できます。
@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;
}
クラスに注釈が付けられている場合、processor#processメソッドは通知されません@Bypass
。
では、 を使用する場合AbstractProcessor
、どのターゲットが別の注釈であるかをどのように主張するのでしょうか?