我正在使用jboss Seam框架来调用像Component.forName(“exampleBean”)这样的seam组件.newInstance();作为“exampleBean”我必须查找的bean的名称。 但是最近我迁移到JEE6并且我正在寻找在不使用JNDI上下文的情况下查找EJB或CDI bean的方法?
答案 0 :(得分:1)
你正在寻找Deltaspike。
解析一个简单的上下文实例: MyBean myBean = BeanProvider.getContextualReference(MyBean.class,false); 如果查找给定接口的实现并且不需要实现,或者不要求存在具有给定限定符的实例(请参阅限定符示例以获取更多详细信息),则将true作为第二个参数传递[... ]
http://deltaspike.apache.org/documentation/core.html#_beanprovider
答案 1 :(得分:0)
要按名称查找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));
}
答案 2 :(得分:0)
我认为BeanManager会解决你的问题 你可以看看here