用于自定义扩展程序中的bean的cdi拦截器

时间:2019-03-24 12:06:52

标签: java-ee wildfly cdi weld

我所拥有的:

  • 我通过扩展名注册了许多bean。
  • 这些bean是仅接口的bean
  • 这些接口可以定义构造型,包括作用域,拦截器和装饰器
  • Bean实现Bean.getStereotypes中,我返回了由这些接口定义的一组构造型注释。
  • 这些接口之一包括一个自定义拦截器:

拦截器绑定:

@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拦截器将为此bean注册。 这不会发生。有什么我想念的吗?

  • CDI 1.2
  • Wildfly 10.0.0
  • java 8

0 个答案:

没有答案