1. 程式人生 > >Spring的核心機制:依賴注入(DI)

Spring的核心機制:依賴注入(DI)

1 理解依賴注入

  A物件需要呼叫B物件方法的情形,被Spring稱為依賴,即A物件依賴於B物件;

  互相呼叫的關係稱為依賴關係;

  Spring容器是一個大工廠,管理著所有java物件,這些物件被稱為Bean;

  Spring容器通過一種“依賴注入”的方式來管理Bean之間的依賴關係;

  使用依賴注入,可謂Bean注入普通的屬性值,注入其它的Bean引用;

依賴注入是一種優秀的解耦方式,讓Spring的Bean以配置檔案的方式組織在一起,而不是硬編碼的方式組織在一起;

IOC--控制反轉和DI--依賴注入,其含義完全相同,只是描述的角度不同;

  IOC--控制反轉-: 呼叫者獲取被依賴的物件,由原來的主動便成為被動接受;

  DI--依賴注入:Spring直接將被依賴的物件注入給呼叫者,無需呼叫者主動去獲取;

 

2 屬性注入(設定注入)  

  屬性注入即通過 setter 方法注入Bean 的屬性值或依賴的物件
  屬性注入使用 <property> 元素, 使用 name 屬性指定 Bean 的屬性名稱,value 屬性或 <value> 子節點指定屬性值
  屬性注入是實際應用中最常用的注入方式

<Bean  id="student" class="com.bugshi.Studeng">
        <property name="stuName" value="bugshi"></property>
        <property name="age" value="13"></property>
     <property name="school" ref="school"></property>
</bean>

 

<bean/> :代表一個Bean物件,id:唯一標識,class:對應的類,Spring通過該類使用反射得到類的資訊完成資訊的設定;

<property> :代表一個Bean物件的屬性,name:屬性的setter方法的首字母小寫,value : 設定的屬性值,ref:指向某個Bean的引用id;

 

3 構造注入

  通過構造方法注入Bean 的屬性值或依賴的物件,它保證了 Bean 例項在例項化後就可以使用;

  構造器注入在 <constructor-arg> 元素裡宣告屬性, <constructor-arg> 中沒有 name 屬性;

按索引匹配入參:以下標去匹配引數

<Bean  id="student" class="com.bugshi.Studeng">
        <constructor value="bugshi" index="0"></constructor>
        <constructor value="13" index="1"></constructor>
<constructor ref="school"></constructor>
</bean>

按型別匹配入參:以型別去匹配引數

<Bean  id="student" class="com.bugshi.Studeng">
        <constructor value="bugshi" type="java.lang.String"></constructor>
        <constructor value="13" index="1" type="int"></constructor>
<constructor ref="school"></constructor>
</bean>

  ref屬性:指向某個Bean引用的Id;

 

兩種注入方式沒有絕對的好壞,只有應用場景的不通;

建議採用屬性注入為主,構造注入為輔的注入策略;