Перехватчик CDI для bean-компонентов из собственного расширения - PullRequest
0 голосов
/ 24 марта 2019

Что у меня есть:

  • Я регистрирую количество бинов через расширение.
  • Эти компоненты являются только интерфейсными компонентами
  • Эти интерфейсы могут определять стереотипы, которые включают области действия, перехватчики и декораторы
  • в реализации Bean, Bean.getStereotypes, Iвозвращает набор аннотаций стереотипа, определенных этими интерфейсами.
  • Один из этих интерфейсов включает пользовательский перехватчик:

Привязка перехватчика:

@Documented
@InterceptorBinding
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Translated {
}

Стереотип:

@Stereotype
@Documented
@Translated
@IndexAnnotated
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TranslationService {
}

Как зарегистрировать стереотип:

public class CustomBean implements Bean {

  @Override
  public Set<Class<? extends Annotation>> getStereotypes() {
    final Set<Class<? extends Annotation>> definedStereoTypes = Arrays.stream(beanInterface.getAnnotations())
            .map((annot) -> annot.annotationType())
            .filter((annotType) -> annotType.isAnnotationPresent(Stereotype.class))
            .collect(toSet());

    final Set<Class<? extends Annotation>> stereotypes = ImmutableSet.<Class<? extends Annotation>>builder()
            .addAll(definedStereoTypes)
            .add(GlobalStereotype.class)
            .build();

    log.info("Stereotypes for beans <{}>: {}", id, stereotypes);

    return stereotypes;
  }

Пример использования:

@TranslationService
@ConfigProject("TTS")
public interface FooterTranslationService {

  @Nonnull
  @Default("The Company")
  String getTheCompanySectionTitle();

}

и реализация перехватчика:

@Slf4j
@Dependent
@Translated
@Interceptor
@Priority(Interceptor.Priority.APPLICATION)
public class TranslationInterceptor {

  @AroundInvoke
  public Object intercept(@Nonnull final InvocationContext ic) throws Exception {
    log.info("Intercepting translation);
    return ic.proceed();
  }
}

Я предполагал, что при возврате набора Stereotype в реализации Bean соответствующий перехватчик Translated будет зарегистрирован для этого компонента,Такого не бывает.Что-то мне не хватает?

  • CDI 1.2
  • Wildfly 10.0.0
  • java 8
...