2014-12-22 57 views
1

我正在关注this WildFly Java EE教程。为什么构造实例<Integer>而不是int

我对下面的代码问题:

@Inject 
@MaxNumber 
private int maxNumber; 

@Inject 
@Random 
Instance<Integer> randomNumber; 

为什么在maxNumber情况下int注入,并在randomNumber情况下Instance<Integer>

我已经使用int randomNumber测试了代码,它似乎工作。

回答

0

基于Instance javadoc

在特定情况下,喷射不是最方便的方法来获得 的上下文参考。

  • 豆型或限定符在运行时动态地变化,或
  • 取决于部署中,可能没有豆满足型和 限定符,或
  • :例如,它可以不被时使用
  • 我们想遍历某种类型的所有bean。

所以,如果bean被标记为@Random则值是部署时间依赖,应由Instance包裹。 Instance是通用的,因此它需要对象类型Integer不是原始的int

+0

你能解释一下你的意思是这个值是依赖于部署时间吗?我读了javadoc,但那一部分我不明白。 –

+0

这是不准确的。如果object(type)来自不是CDI的包(不包含'bean.xml'),那么我将不会触发bean发现过程。所以你需要'Producer'来创建对象(条件2 - 不能在开始时确定bean)。另外,因为它在运行时是不同的(它是随机的),所以它需要是“实例”。 –

相关问题