BeanManager getBeans方法没有考虑可重复的注释

时间:2017-07-07 13:20:55

标签: java java-ee

从java 8开始,我们可以向成员添加多个相同类型的注释。我们开发了一个插件系统,在服务器启动时,收集所有使用@Extension注释注释的bean并注册它们。我想调整这个逻辑,以便成员可以使用多个扩展注释进行注释,并且仍然可以注册为插件,但javax.enterprise.inject.spi.BeanManager.getBeans给了我一些麻烦。它检索使用一个@Extension注释注释的类型,但不是两个或更多注释。我在这里错过了什么吗?

这是扩展注释

@Qualifier
@Target({ TYPE, METHOD, PARAMETER, FIELD })
@Retention(RUNTIME)
@Documented
@Repeatable(Extensions.class)
public @interface Extension {...

这是扩展注释

@Target({ TYPE, METHOD, PARAMETER, FIELD })
@Retention(RUNTIME)
@Documented
public @interface Extensions {
    Extension[] value();
}

这就是我检索扩展注释bean的方法

Set<Bean<?>> pluginBeans = beanManager.getBeans(Plugin.class, ExtensionLiteral.INSTANCE);

ExtensionLiteral只是收集扩展所需的虚拟实例

public class ExtensionLiteral extends AnnotationLiteral<Extension> implements Extension {
...
public static final ExtensionLiteral INSTANCE = new ExtensionLiteral();
...
}

0 个答案:

没有答案