java 字段构造函数_依赖注入–字段vs构造函数vs方法
java 字段構造函數
嗨,今天,我想簡短地討論將依賴項注入您的類的不同方式。
通常,您有以下三種注射方法
- 直接進入字段/屬性
- 通過顯式的setter方法
- 通過顯式的構造函數參數
現場注入
這種類型的注入為將所需的依賴項注入到類中提供了某種反射機制。
盡管這種注入類型的好處是,它消除了諸如setter方法或構造函數參數之類的混亂代碼,但其缺點是這些依賴項是不可見的。 如果從外部查看類,則只會看到公共方法,并且可能是構造函數。
即使這使您非常清楚地了解了類提供的服務,但在我看來,它仍然具有以下主要缺點:
在為此特定類編寫測試時,您必須檢查該類以查看所需的依賴項,并且必須使用DI框架(即使是簡單的測試),也必須使用一種反射機制來注入依賴項(模擬/存根/真實)。
更糟糕的是,傳入依賴項的數量隱藏在該類中。 當然,您可以使用工具(JDepend等,pp。)告訴您依賴性的數量和方向,或者使用一個文件來指定注入,但是您必須依靠這種工具或檢查類。
我觀察到的另一個缺點是,與使用Setter或Constructor Injection的情況相比,創建具有多個職責的類的機會更高。
就像是:
哦,讓我們使用這個精美的注解在這里注入我們需要的服務...幾天/幾小時后:測試這個野獸是如此的困難
二傳手注射
Setter注入工具setter方法,每個依賴項一個,DI框架使用該方法來注入依賴項。
它是一個變體,它使依賴項顯式顯示,并為您清楚地了解特定類的依賴項。
在測試期間,它的好處是您不必使用DI框架或反射機制,而可以直接設置依賴項。
這種方法的缺點是:您可以構造處于無法使用狀態的類。 這是因為如果需要依賴項或可選依賴項,則無法與外部區分開。
構造函數注入
構造函數注入對類的構造函數進行檢測,DI框架使用該類來注入依賴項。 這是使依賴關系明確的另一個變體。
與Setter注入相反,它可以防止您在不規則狀態下創建類。 (當然,您可以傳遞null,但這不只是一種作弊,對嗎?)所以我要說,這是最嚴格的變體:
每個依賴項都是強制性的
這種注射類型的好處是
同樣,這里的缺點是您無法區分可選依賴項和必需依賴項。 構造函數強制設置所有字段。
我要討論的最后一個變體是:
混合二傳手和構造劑注射
我個人更喜歡此變體,混合了Setter和Constructor注入。
這給您:
- 在合同級別上區分強制性依賴項和可選性的能力
- 清楚說明特定類的依賴項是什么
- 使您可以輕松地檢查班級是否負有重大責任
- 構建后正確配置的類
與純方法類似,使用這種注入進行測試相當簡單。 您不需要DI框架,并且可以輕松地將模擬的/存根的/真實的實現傳遞到要測試的類中。
使用/喜歡什么?
這個答案在很大程度上取決于您的框架/團隊規則/語言。
但是我強烈建議您使用顯式注入變量之一,因為它們使您無需使用依賴注入框架即可編寫純單元測試。
翻譯自: https://www.javacodegeeks.com/2015/01/dependency-injection-field-vs-constructor-vs-method.html
java 字段構造函數
總結
以上是生活随笔為你收集整理的java 字段构造函数_依赖注入–字段vs构造函数vs方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: s8狼人出装和符文(新版本lol狼人打野
- 下一篇: 莱西楼盘备案价(莱西备案房价)