2011-09-08 57 views
0

也許是一個愚蠢的問題,但是...我有一堆代碼庫,裏面有@Inject註釋。但是,當應用程序運行並非所有對象都被注入時,某些值爲空。guice將哪些類注入到對象?

所以我的問題是:guice如何知道哪些類必須被處理?它以某種方式遍歷對象圖嗎?

+1

什麼是null的一些值?這並不十分清楚您的意思...... –

+0

標有@Inject註釋的對象的值。他們沒有被注射。並且由於它們沒有被標記爲「可選」,我認爲應該注入的課程根本不被guice處理 – Axl

+1

目前還不清楚您試圖注入它們的位置。如果可能,請給出一個簡短但完整的例子。 –

回答

0

雖然這個問題不是很清楚,我會盡力澄清其中注入將發生或不發生一些情況,所以你可以看到你可能會面臨什麼樣的問題:

  1. 如果類A有@注入字段,構造函數或方法,但直接通過代碼中的新位置實例化,那麼它通常不會被注入。

  2. 實際上,在上述情況下,如果通過調用injectMembers()將實例顯式「標記」爲Module中的注射,則可能發生注射。

  3. 如果A類具有@Inject字段,構造函數或方法,並且它由Guice(通過Injector.getInstance(...)或通過在由Guice創建的實例中傳遞性地注入)創建,那麼注入字段是不可能的null或注入的方法與null調用,除非參數已明確聲明@Nullable。如果Guice必須注入一個依賴不能被解析的對象,那麼它會拋出一個異常。

當然,這是對Guice如何注入(或不注入)內容的簡單解釋。重要的是第3點。這讓我相信注入字段的實例爲空並不是由Guice創建的,而是直接用new實例化的。