1點是正確的,創建一個使用新的操作員將 對象導致與依賴緊耦合。請參見下面的 配置: -
<!--This is the material used for construction of structures -->
<bean id="constructionMaterial" class="com.construction.Brick" />
<!--Below are the three constructions structures -->
<bean id="building1" class="com.construction.structures.School">
<property name="material" ref="constructionMaterial" />
</bean>
<bean id="building2" class="com.construction.structures.College">
<property name="material" ref="constructionMaterial" />
</bean>
<bean id="building3" class="com.construction.structures.Hospital">
<property name="material" ref="constructionMaterial" />
</bean>
在上面的例子中假設,如果施工材料改變了我只需要改變constructionMaterial的bean定義。
如果您會使用新的操作符,則必須更改三個班級的學校,學院,醫院的代碼。還是看起來不錯,考慮是否有1000個不同的結構。
依賴注入也使測試非常容易,經過良好測試的代碼 是穩定的。
Class A{
public String method1(){
B calcObject=new B();
return "Calculated value is:"+calcObject.calculation();
}
}
如果我需要類A的單元測試方法1(),它不可能做到這一點而不類B,這反過來又衝突單元測試的概念的測試計算()。
如果我改變如以下代碼:
Class A{
private B b;
public String method1(){
return "Calculated value is:"+b.calculation();
}
public void setB(B b){
this.b=b;
}
}
在這種情況下,我可以很容易地模擬類B的對象,並執行類的方法1()的單元測試。您可以結帳如何使用模擬對象here執行測試。依賴注入再次成爲這裏的救星。
第3點不正確,如果您使用的註釋類似@Autowired,即使您不使用setter方法或使用參數化構造函數,也沒關係。 在這種情況下,依賴項由Reflection注入。
依賴注入的主要目的是爲了使測試更加簡單 –