2.3 Spring的核心機制:依賴注入

HamalAlpha發表於2017-07-31

依賴注入(Dependdency Injection)又稱控制反轉(Inversion of Control,IoC)。傳統模式下,當一個Java物件需要呼叫其他物件時,要麼通過關鍵字new建立一個新物件;要麼運用工廠模式,先建立被依賴物件的工廠物件,再通過工廠物件獲取被依賴物件;兩種方式均為呼叫者主動獲取被依賴物件,這必然會帶來呼叫者與被依賴物件或被依賴物件的工廠物件耦合(依賴程度),不利於升級維護。而使用Spring框架後,呼叫者只需被動接受Spring容器為呼叫者成員變數賦值(我們只需要在Spring配置檔案中為呼叫者配置<property... />子元素,即可驅動Spring呼叫呼叫者成員變數的setting方法進行賦值)。

依賴注入通常有如下兩種:

  • 投值注入:IoC容器使用成員變數的setter方法來注入被依賴物件。
  • 構造注入:IoC使用構造器來注入被依賴物件。

XML配置檔案部分程式碼(舉例):

<!--設定注入-->
    <!--配置chinese例項,其實現類是Chinese類-->
    <bean id="chinese" class="spring.Chinese">
    <!--驅動Spring呼叫Chinese類的setAxe()方法,將容器中id="stoneAxe"的bean例項作為傳入引數-->
        <property name="axe" ref="stoneAxe" />
    </bean>
    <bean id="stoneAxe" class="spring.StoneAxe" />

<!--構造注入-->
    <bean id="chinese" class="spring.Chinese">
        <!--驅動Spring呼叫Chinese帶兩個引數的建構函式來建立物件-->
        <!--index屬性用於指定是第幾個構造引數值,type屬性指定該引數型別-->
        <constructor-arg ref="steelAxe" index="0">
        <constructor-arg value="400" index="1" type="int">
    </bean>

相關文章