如何从CDI BeanManager中通过类名检索bean? (不是任何孩子)

时间:2018-01-08 20:08:07

标签: cdi bean-manager

我正在尝试理解一段代码并且不理解CDI BeanManager的文档

  

Bean解析(设置> bean)   将不明确的依赖项解析规则应用于一组bean。

什么是不明确的依赖解析规则? CDI如何将Set<Bean> beans减少为单个Bean?

我遇到了一个小问题,我想按照确切的类型查找bean,但不知道该怎么做:

    Set<Bean<?>> beans = bm.getBeans(com.pkg.MyClass.class, annotations);
    Bean<?> bean = bm.resolve(beans);

将找到我所有类型为com.pkg.MyClass的bean - 确切的实现和任何子项。如果CDI中只有儿童,那么它将返回其中一个孩子。但是,我只想找到确切的com.pkg.MyClass bean。如果没有确切的bean不存在,我想返回null或抛出异常。

如何告诉bean管理器在按类名搜索bean时我只想要完全匹配?

1 个答案:

答案 0 :(得分:2)

通常,为了执行此操作,您将使用@Typed注释实际实现,并仅指定该类型。另请参阅https://docs.jboss.org/cdi/api/1.0/javax/enterprise/inject/Typed.html