Что у меня есть:
- Я регистрирую количество бинов через расширение.
- Эти компоненты являются только интерфейсными компонентами
- Эти интерфейсы могут определять стереотипы, которые включают области действия, перехватчики и декораторы
- в реализации
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