繁体   English   中英

排除 CDI 拦截器要调用的特定方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM