我有一个拦截器绑定注释:
@InterceptorBinding
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyBinding {
}
对于这个CDI拦截器:
@Interceptor
@MyBinding
public class MyInterceptor {
@AroundInvoke
public Object applyPolicy(InvocationContext ctx) throws Exception {
return blablabla;
}
}
一个带注释的类,这意味着该类的每个方法都将调用MyInterceptor
@MyBinding
public class GlobalController {
public void methodA() {...}
public void methodB() {...}
}
一切正常,但我希望methodB不要调用我的拦截器。
我在我的方法上尝试了注释@ExcludeClassInterceptors和@ExcludeDefaultInterceptors,但它对我不起作用。我认为这些注释特别用于排除EJB拦截器的方法,而不是带有拦截器绑定的CDI拦截器。
答案 0 :(得分:1)
不确定这些注释,但作为一种解决方法,您可以为要排除的方法添加注释。从拦截器中的Method
获取InvocationContext
并检查该方法是否具有注释。在这种情况下,只需委托原始方法。
答案 1 :(得分:0)
在方法级别尝试@MyBinding
:
public class GlobalController {
@MyBinding
public void methodA() {...}
public void methodB() {...}
}