在Java SE中使用Producer方法(CDI 2.0)

时间:2018-03-09 16:45:10

标签: java cdi

我正在尝试编写一个使用CDI 2.0在Java SE中使用Producer方法的简单示例,但遇到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);
    }

}

我通过bootstrapping运行这个例子:

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

我有一个beans.xml文件。

例外是:

线程中的异常&#34; main&#34; org.jboss.weld.exceptions.DeploymentException:WELD-001408:用于与限定符类型List不合格依赖@default在注射点[BackedAnnotatedField]在com.XXXX.RandomNumberService.randomNumber(RandomNumberService.java @注入私人com.XXXX.randomNumber: 0)

我尝试使用@Inject注入bean,这没有问题,所以我知道基本设置没问题。另外,我试图使用具体类型ArrayList而不是List和相同的结果。

非常感谢任何帮助。

为了回答我的尝试。

我试过:@Inject @Any private Instance&gt; randomNumber;

发生同样的错误。此外,我尝试使用原始类型和包装器,我得到相同的响应。

生成POJO时的结果相同。

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

@Inject @Ford
private Car car;

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

1 个答案:

答案 0 :(得分:0)

尝试以下方法:

@Any
@Inject
private Instance<Integer> randomNumber;

Instance实施Iterable后,您就可以迭代这些值。