2014-12-22 56 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)。另外,因爲它在運行時是不同的(它是隨機的),所以它需要是「實例」。 –

相關問題