2012-01-07 19 views
4

我想了解注入依賴注入。無法理解的字段注入

我讀了很多文章,但是我讀得越多,我越是感到困惑。

因此,我所做的是試圖瞭解the Google Guice page上發佈的一些源代碼。

我明白,我們必須創建一個模塊(例如:BillingModule)在界面之間的結合及其實施完成:

bind(BillingService.class).to(RealBillingService.class); 

而且在實現類,我們必須inject構造。

的問題是,我不明白the field injection

@Inject Connection connection; 

的問題很簡單:這是什麼意思?

回答

4

這意味着你不必實例化對象,你通常會:

Connection connection = //someConstructor 

,但你更希望通過一些其他方式來得到它。註釋定義了一個注入點,並且它是您希望應用程序服務器根據配置爲您實例化Connection對象的位置。基本上,這意味着您可以免除實例化Connection對象的複雜性,並且只能在功能上工作。

當然,如果你的應用服務器不支持字段注入或者由於某種原因失敗了,@Inject註解並不意味着什麼,你最終會得到一個空的連接對象。

+0

感謝您的回答。爲了避免使用該對象的'null'值,我該怎麼做?我應該創建一個'Connection'接口並將其綁定到'ConnectionIml'實現類,該類將在其構造函數的頂部包含'inject'註釋? – Rio 2012-01-07 12:51:56

+1

說實話,我從來沒有見過這樣的做法。通常,如果您的應用程序服務器無法爲您的Connection提供適當的值,則可以調整應用程序服務器,而不是編寫故障轉移代碼。 – 2012-01-07 14:06:43

+0

謝謝!很直接地解釋了這個問題! – mavesonzini 2017-11-21 11:43:36

1

註釋Injector應該注入值的實現類(構造函數,方法和字段)的成員。注射器滿足以下注射請求:

在任何情況下,無論其Java訪問說明符(private,default,protected,public)如何,都可以注入成員。

+0

你的第一句話沒有意義 – CodyBugstein 2014-09-02 00:05:33