【发布时间】:2014-12-11 15:09:16
【问题描述】:
我正在使用 jboss Seam 框架来调用像 Component.forName("exampleBean").newInstance(); 这样的接缝组件。作为“exampleBean”,我必须查找的 bean 的名称。 但是最近我迁移到 JEE6 并且我正在寻找在不使用 JNDI 上下文的情况下查找 EJB 或 CDI bean 的方法?
【问题讨论】:
标签: java jakarta-ee jboss cdi
我正在使用 jboss Seam 框架来调用像 Component.forName("exampleBean").newInstance(); 这样的接缝组件。作为“exampleBean”,我必须查找的 bean 的名称。 但是最近我迁移到 JEE6 并且我正在寻找在不使用 JNDI 上下文的情况下查找 EJB 或 CDI bean 的方法?
【问题讨论】:
标签: java jakarta-ee jboss cdi
您可能正在寻找 Deltaspike。
解析一个简单的上下文实例: MyBean myBean = BeanProvider.getContextualReference(MyBean.class, false); 如果您查找给定接口的实现并且不需要实现,或者不需要具有给定限定符的实例,则将 true 作为第二个参数传递(有关更多详细信息,请参见限定符示例)[.. .]
http://deltaspike.apache.org/documentation/core.html#_beanprovider
【讨论】:
要按名称查找 CDI bean,可以使用 BeanManager's getBeans method 结合同一类的 resolve 方法。这是一个如何使用它的示例:
@Inject BeanManager beanManager; //inject bean manager into the class
void someMethod() {
Set<Bean<E>> possibleBeans = beanManager.getBeans("aBeanName");
Bean<E> bean = (Bean<E>) beanManager.resolve(possibleBeans);
E instance = beanManager.getContext(bean.getScope()).get(bean, beanManager.createCreationalContext(bean));
}
【讨论】:
我认为 BeanManager 会解决你的问题 你可以看看here
【讨论】: