2016-01-22 131 views
0

我已經經歷了許多相同的stackoverflow答案,但我認爲我仍然不清楚。我的理解是:依賴注入在java春天mvc

  1. 如果我們創建直接對象,如A a=new A();這將是 難以改變/每次處理信息。
  2. 依賴注入向我們提供了我們在運行時需要的而不是編譯時。
  3. 在春天要實現依賴注入,我們必須使用 參數化的構造函數和setter方法(必需)。
  4. 依賴注入用於保持您的代碼CLEAN和STABLE。 你是什麼意思,乾淨和穩定? (請詳細說明,如果你知道用簡單的話 )

這是我瞭解到目前爲止。請糾正我的錯誤,並請在非常簡單的單詞中添加一些要點(如果有的話),以便我能夠輕鬆理解。

感謝提前:)

+0

依賴注入的主要目的是爲了使測試更加簡單 –

回答

0

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注入。

+0

謝謝你這麼多@Amit先生 –

0

這並不容易理解,這對我來說太難了,所以不用擔心。

如果我們創建像A a = new A()的直接對象; 每次更改/處理信息都很困難。

如果代碼寫得很好,那應該不難,spring只是爲此提供配置。

2和3,是的,這是正確的。

關於4,清潔意味着你不會有代碼來處理實際的注射,這意味着 線條狀A a=new A(B,C,D);,我們在一個「注入」的依賴,春天會爲我們。

穩定的意思是,你需要有有效的sprint配置來運行你的代碼,這保證了注入的對象是所需的類型並且按照正確的順序被初始化。

使用彈簧的另一個巨大優勢是對象可重用性。正如你可能已經注意到的那樣,你使用預定義的對象進行注入,它只能初始化爲一次,如果沒有彈簧,很難實現,通常在大型項目中甚至是不可能的。

更多使用彈簧,你不得不使用一些最好的面向對象的做法,否則你就能夠使用彈簧。

你在春天使用Interfaces,所以你提到它很容易改變實現類的注入。

最後它提供了一個配置XML文件來保存所有的依賴關係是如何的酷是:)

+0

非常感謝你@Borislav先生:) –