Я пытаюсь добавить перехватчик программно. Перехватчик называется LogginInterceptor и просто записывает имя используемого метода. При использовании его с аннотацией @Interceptors (LogginInterceptor.class) по методу все работает нормально.CDI Extensions - Добавить перехватчики в ProcessAnnotatedType phase
Однако я пытаюсь создать расширение CDI, которое добавляет эту аннотацию @Interceptors (LogginInterceptor) программно к каждому методу определенного класса (чтобы быть простым). Итак, попробуйте, я создал класс Hello с несколькими методами. Когда эти методы аннотируются вручную, LogginInterceptor работает и печатает имя метода. Однако мой код для добавления этого программно с помощью расширений CDI не работает.
<T> void processAnnotatedType(@Observes ProcessAnnotatedType<T> pat) {
if (pat.getAnnotatedType().getJavaClass().equals(Hello.class)) {
Logger.getLogger("").info("Initial annotations: " + pat.getAnnotatedType().getAnnotations());
Map<String, Class[]> values = new HashMap<>();
Class[] classes = {LoggingInterceptor.class};
values.put("value", classes);
Interceptors interceptors = AnnotationInstanceProvider.of(Interceptors.class, values);
AnnotatedTypeBuilder<T> builder = new AnnotatedTypeBuilder<T>().readFromType(pat.getAnnotatedType());
pat.getAnnotatedType().getMethods().forEach(method -> {
builder.addToMethod(method, interceptors);
});
pat.setAnnotatedType(builder.create());
Logger.getLogger("").info("Ending annotations: " + pat.getAnnotatedType().getAnnotations());
}
}
Я использую Apache Deltaspike для AnnotationInstanceProvider и AnnotatedTypeBuilder. Создается аннотация, а также обертывание AnnotatedType. Однако перехватчик не работает.
Я использую WildFly 9.
PS: Я также заметил, что перехватчики перехватчиков не работают для меня. Работает только аннотация @Interceptors.
Благодарим вас за любые советы.
Я забыл определить его как перехватчик в beans.xml. Это была проблема. Спасибо. –