排除CDI Interceptor要调用的特定方法

时间:2016-09-20 15:45:33

标签: java ejb 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拦截器。

2 个答案:

答案 0 :(得分:1)

不确定这些注释,但作为一种解决方法,您可以为要排除的方法添加注释。从拦截器中的Method获取InvocationContext并检查该方法是否具有注释。在这种情况下,只需委托原始方法。

答案 1 :(得分:0)

在方法级别尝试@MyBinding

public class GlobalController {

  @MyBinding    
  public void methodA() {...}

  public void methodB() {...}
}