3

我正在尝试找到一种在运行时注入的几个 EJB 之间进行选择的方法。

场景是这样的:有 2 个 bean (ejbA, ejbB),它们都实现了相同的接口 (ejbInterface)。在几个注入点(其他托管 bean,即在 ejbCaller bean 中)我想注入 ejbInterface 的实现。我会在运行时知道我需要哪一个(即基于一些 DB 值)。

我知道一种可行的方法是通过@Alternative 注释和部署描述符在部署时进行选择,但我宁愿在运行时进行选择。

我已经尝试过@Producer 方法,但这样我只能注入非托管对象(我在生产者中实例化并且不是容器管理的对象,或者它们本身可以是注入点)。我发现了生产者的两种解决方法/利用:

  • 生成一个非托管对象并通过setupejbInterface 中的方法传递任何托管对象(即其他 bean、实体管理器)(ejbCaller 必须传递这些)
  • 在生产者中使用 JNDI 查找并返回托管对象

这两种解决方法都容易出错且不优雅。有没有更好的解决方案?

4

1 回答 1

1

只需注入 BeanManager 并使用

javax.enterprise.inject.spi.BeanManager.getBeans(Type, Annotation...)

在运行时

于 2014-02-15T07:28:55.473 回答