[英]Exclude a specific method to be invoked by CDI Interceptor
我有一个拦截器绑定注释:
@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 拦截器。
不确定这些注释,但作为一种解决方法,您可以向要排除的方法添加注释。 在拦截器中从InvocationContext
中获取Method
并检查该方法是否有注解。 在这种情况下,只需委托给原始方法。
在方法级别尝试@MyBinding
:
public class GlobalController {
@MyBinding
public void methodA() {...}
public void methodB() {...}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.