如何处理拦截器绑定中的属性

zir*_*iri 6 java interceptor java-ee-6

我有一个注释:

@Inherited
@InterceptorBinding
@Retention(RUNTIME)
@Target({METHOD, TYPE})
public @interface Example {
}
Run Code Online (Sandbox Code Playgroud)

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

@Interceptor
@Example
public class ExampleInterceptor implements Serializable {
...
}
Run Code Online (Sandbox Code Playgroud)

我想添加一个参数文本:

public @interface Example {
    String text();
}
Run Code Online (Sandbox Code Playgroud)

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

@Interceptor
@Example(text=???????)
public class ExampleInterceptor implements Serializable {
...
}
Run Code Online (Sandbox Code Playgroud)

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

以及如何获取参数值?我是否必须使用反思或有更好的方法吗?

zir*_*iri 13

@Nonbinding使用注释时,会为每个属性值调用拦截器.

注解:

public @interface Example {
    @Nonbinding String text() default "";
}
Run Code Online (Sandbox Code Playgroud)

拦截器:

@Interceptor
@Example
public class ExampleInterceptor implements Serializable {
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 获取拦截器中被拦截方法的注解值:InvocationContext ctx; 示例示例 = ctx.getMethod().getAnnotation(Example.class); 字符串值 = example.value(); (2认同)