【问题标题】:Exclude a specific method to be invoked by CDI Interceptor排除 CDI 拦截器调用的特定方法
【发布时间】:2017-01-28 15:18:01
【问题描述】:

我有一个拦截器绑定注解:

@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 拦截器。

【问题讨论】:

  • 您好,您使用的是什么 CDI impl?什么容器?
  • 在 Jboss EAP 6.4.0 中使用 Deltaspike

标签: java ejb cdi interceptor


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    在方法级别尝试@MyBinding

    public class GlobalController {
    
      @MyBinding    
      public void methodA() {...}
    
      public void methodB() {...}
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-17
      • 2012-08-18
      • 2014-03-10
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 2011-04-19
      • 2011-10-21
      相关资源
      最近更新 更多