7

我有一个注释:

@Inherited
@InterceptorBinding
@Retention(RUNTIME)
@Target({METHOD, TYPE})
public @interface Example {
}

以及一个用于处理它的拦截器类:

@Interceptor
@Example
public class ExampleInterceptor implements Serializable {
...
}

我想添加一个参数文本:

public @interface Example {
    String text();
}

但是我不知道如何处理拦截器类中的参数。如何修改类的注解?

@Interceptor
@Example(text=???????)
public class ExampleInterceptor implements Serializable {
...
}

如果我写@Example(text="my text"),拦截器只会在方法/类被注释时被调用@Example(text="my text")。但我希望拦截器在参数值上被独立调用 - @Example(text="other text")

以及如何获取参数值?我必须使用反射还是有更好的方法?

4

2 回答 2

16

使用注解时,每个属性值都会调用拦截器@Nonbinding

注解:

public @interface Example {
    @Nonbinding String text() default "";
}

拦截器:

@Interceptor
@Example
public class ExampleInterceptor implements Serializable {
    ...
}
于 2012-05-15T10:51:29.830 回答
0

首先,如果您只有一个参数,您可以命名它value,然后可以跳过参数名称(默认),=> 可以跳过 text= 部分,例如:

@Example("my text") //instead of @Example(test="My text")
public class ...

要访问注解,您可以使用 、 或 type 上的方法,您getAnnotation必须先获得该方法。然后你会得到一个注解的实例,你可以在上面调用你的方法。ClassMethodFieldConstructor

Example example = getClass().getAnnotation(); //if you are inside the interceptor you can just use getClass(), but you have to get the class from somewhere
example.value(); //or example.text() if you want your annotation parameter to be named text.
于 2012-05-05T22:21:38.453 回答