Java EE 7:按名称模式注入所有bean实例

时间:2018-05-15 08:34:38

标签: java java-ee dependency-injection java-ee-7

我想获取类名以Cache结尾的所有bean实例。

这在Java EE 7中是否可行?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:1)

您可以注入BeanManager

@Inject
BeanManager beanManager;

然后你可以从CDI容器中get the beans。如果您的bean没有通用界面,您可以使用:

Set<Bean<?>> beans = beanManager.getBeans(Object.class, new AnnotationLiteral<Any>() {}));

然后迭代集合并根据您的需要对其进行过滤。

答案 1 :(得分:0)

使用从BeanManager检索给定类型的bean的producer方法,并根据类名对其进行过滤

@Produces  
public List<MyInterface> produceMyInterfaces() {  
    return beanManager.getBeans(MyInterface.class).stream().filter(e -> e.getClass().getSimpleName().contains("something").collect(Collectors.toList());  
}