2016-09-20 67 views
2

我有一个拦截器绑定注释:排除特定的方法来通过CDI拦截器调用

@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

嗨,你使用的是什么CDI IMPL?什么容器? –

+0

在Jboss EAP 6.4.0中使用Deltaspike –

回答

1

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

+0

好的,谢谢它可以在我的情况下工作 –

0

在方法层面尝试@MyBinding

public class GlobalController { 

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

    public void methodB() {...} 
}