从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();
...
}