【发布时间】:2018-08-18 07:09:31
【问题描述】:
我正在尝试编写一个在 Java SE 和 CDI 2.0 中使用生产者方法的简单示例,但遇到了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();
}
我有一个 beans.xml 文件。
例外是:
线程“main”中的异常 org.jboss.weld.exceptions.DeploymentException: WELD-001408: 带有限定符的列表类型的依赖项不满足 @Default 在注入点 [BackedAnnotatedField] @Inject private com.XXXX.randomNumber at com.XXXX .RandomNumberService.randomNumber(RandomNumberService.java:0)
我已经尝试使用@Inject 来注入 bean,这没有问题,所以我知道基本设置没问题。另外,我尝试使用具体类型 ArrayList 而不是 List 和相同的结果。
任何帮助将不胜感激。
响应我尝试过的答案。
我试过了:@Inject @Any private Instance> randomNumber;
发生同样的错误。我也尝试过使用原始类型和包装器,我得到了相同的响应。
生成 POJO 时的结果相同。
@Produces
@Ford
public Car makeCar(){
return new Car();
}
@Inject @Ford
private Car car;
我开始怀疑问题出在 SeContainer 的配置上。
【问题讨论】:
-
在新的 maven 项目中使用您的代码的精确副本,weld-se-core 3.0.2-Final 作为依赖项和资源/META-INF 中的空 beans.xml,代码可以工作非常适合我。因此,一定有其他问题,可能与项目设置有关。哪些是您的确切依赖项,您有 beans.xml 吗?它包含什么?
-
我想生产者的 bean没有被发现。我不确定您的
beans.xml是什么样的以及它声明的(如果有的话)bean 发现模式,但默认一个已注释。在这种情况下,只会发现带有 bean 定义注释的类。尝试在定义生产者的类上添加一些范围(例如@ApplicationScoped)。