2016-09-20 2 views
2

У меня есть перехватчик связывания аннотаций:Исключить конкретный метод, который будет вызываться КДИ перехватчик

@InterceptorBinding 
@Target({ElementType.TYPE, ElementType.METHOD}) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface MyBinding { 
} 

К этому КДИ перехватчика:

@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() {...} 
} 

Все работает нормально, но я хочу, чтобы метод B не вызывал мой перехват или.

Я пробовал как аннотации @ExcludeClassInterceptors, так и @ExcludeDefaultInterceptors по моему методу, но это не работает для меня. Я думаю, что эти аннотации специально предназначены для исключения метода для перехватчика EJB, а не перехватчика CDI с перехватчиком Interceptor.

+0

Привет, как КДИ осущ вы используете? Какой контейнер? –

+0

Использование Deltaspike в Jboss EAP 6.4.0 –

ответ

1

Не знаете об этих аннотациях, но в качестве обходного пути вы можете добавить аннотацию к методу, который хотите исключить. Получите Method от InvocationContext в перехватчике и проверьте, имеет ли метод аннотацию. В этом случае просто делегируйте исходный метод.

+0

Хорошо спасибо, что он мог работать в моем случае –

0

Попробуйте @MyBinding на уровне метода:

public class GlobalController { 

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

    public void methodB() {...} 
} 
Смежные вопросы