如何通过类名以编程方式注入CDI bean

时间:2019-04-24 22:59:47

标签: java-ee cdi

我有一个用@Example注释的bean。该bean实现了一些接口IExample。我想通过使用其类名以编程方式注入此bean,但是我不想指定其限定符。
我收到不满意的依赖项错误,因为它正在使用@Any搜索Bean,并且此Bean具有@Any和@Example,由于某些原因,它们不能满足要求。

这可以在CDI中完成吗?

1 个答案:

答案 0 :(得分:0)

假设您要注入接口

如果一个bean是合格的,那么您需要通过其带有限定符的接口注入bean,这就是CDI的工作方式。即使使用Instance,也需要通过其限定符选择特定的实现,否则CDI应该如何知道您想要的实现?应该是有原因的。否则,您只能迭代所有找到的实现。

假设您可以使用课程

如果可以使用该类,然后直接注入实现类,则不需要限定符。之所以可行,是因为一个类始终是唯一的,一个类不能有多个实现,除非是抽象类,否则它是一个实现。

阅读此文档,以了解类型安全解析的工作原理,也许有助于弄清事情。

https://docs.jboss.org/weld/reference/latest/en-US/html/injection.html