在 Java SE 中使用生产者方法 (CDI 2.0)



我正在尝试编写一个简单的示例,在 CDI 2.0 中使用 Java SE 中的生产者方法,但遇到了Unsatisfied dependencies问题。

这是制片人:

private Random ran = new Random();
@Produces
private List<Integer> get() {
return new ArrayList<Integer>() {{
add(ran.nextInt(100));
add(ran.nextInt(100));
}};
}

这是注入点:

public class RandomNumberService {
@Inject
private List<Integer> randomNumber;
public void print(){
System.out.println(randomNumber);
}
}

我通过像这样引导来运行示例:

public static void main(String... args) {
SeContainer container = SeContainerInitializer
.newInstance()
.initialize();
container.select(RandomNumberService.class).get().print();
container.close();
}

我有一个豆子.xml文件。

例外情况是:

线程"main"中的异常 org.jboss.weld.exceptions.DeploymentException: WELD-001408:在注入点 [BackedAnnotatedField] @Inject私有通信中@Default,带有限定符的 List 类型未满足的依赖项。XXXX.随机数在com。XXXX.RandomNumberService.randomNumber(RandomNumberService.java:0)

我尝试使用@Inject注入豆子,这没有问题,所以我知道基本设置是可以的。此外,我尝试使用具体类型 ArrayList 而不是该列表和相同的结果。

任何帮助将不胜感激。

为了回应我已经尝试过的答案。

我试过:@Inject @Any私有实例>随机数;

发生相同的错误。我也尝试过使用基元类型和包装器,我得到了相同的响应。

当我产生POJO时,结果相同。

@Produces
@Ford
public Car makeCar(){
return new Car();
}
@Inject @Ford
private Car car;

我开始怀疑问题出在 SeContainer 的配置上。

尝试以下操作:

@Any
@Inject
private Instance<Integer> randomNumber;

一旦Instance实现了Iterable,您将能够迭代这些值。

最新更新