java - CDI:手动获取用泛型声明的类的 bean 实例

标签 java generics cdi

这是我手动获取 cdi bean 实例的方式:

Bean<?> bean = (Bean<?>)beanManager.resolve(beanManager.getBeans(Foo.class));
Foo foo=(Foo) beanManager.getReference(bean, bean.getBeanClass(), beanManager.createCreationalContext(bean));

如果我这样声明 Foo 类:

@Dependent
public class Foo{
   ...
}

一切正常。但是,如果我这样声明 Foo 类

@Dependent
public class Foo<T>{
   ...
}

cdi 容器无法创建 cdi bean。如何手动获取使用泛型 (Foo) 声明的类的 cdi bean?

最佳答案

您正在寻找的可能是 javax.enterprise.util.TypeLiteral 。 它是一个实用程序类,允许您指定(bean)类型以及类型变量。然后,它允许检索原始类型以及内部的实际类型参数。这是一个代码片段:

// define the type you want
TypeLiteral<Foo<Bar>> typeLiteral = new TypeLiteral<Foo<Bar>>() {};

// now search for beans; note that getBeans allows to specify Annotations as well!
Set<Bean<?>> beans = beanManager.getBeans(typeLiteral.getType());

// and apply resolution - you should get the one you want here
Bean<?> bean = beanManager.resolve(beans);

关于java - CDI:手动获取用泛型声明的类的 bean 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43145765/

相关文章:

c# - 调用 EventHandler 泛型,TargetParameterCountException

java - CDI 和 servlet 应用程序中的 BeansValidation

java - Weblogic 10.3.6 上的 Weld

Java EE CDI 拦截器在 JAX-RS 资源类中不起作用

java - 使用 Mockito 1.9.5 模拟 JdbcTemplate.queryForObject(..,...,...,)

swift - 如何使用多个类型参数 - Swift 2?

java - Hibernate Annotations,指定要持久化的组件成员

java - 面向对象编程和Java : how to generalize from an abstract class?

java - 将数据从 Java 传递到 Python

java - 在 play WS 响应范围中读取变量值