1. 程式人生 > 實用技巧 >spring——依賴注入的三種方式

spring——依賴注入的三種方式

1 構造器注入(與構造器有直接關係)
  1. 預設無參構造

  2. 3種構造方式:通過<contructor-arg>呼叫類中的構造器

    1. 下標

      <bean id="userService" class="com.guan.service.UserServiceImpl">
              <constructor-arg index="0" ref="apple"></constructor-arg>
      </bean>
      
    2. 型別

      <bean id="userService" class="com.guan.service.UserServiceImpl">
              <constructor-arg type="com.guan.dao.Fruit" ref="apple"></constructor-arg>
      </bean>
      
    3. 引數名(推薦使用)

      <bean id="userService" class="com.guan.service.UserServiceImpl">
          <constructor-arg name="fruit" ref="apple"></constructor-arg>
      </bean>
      
  3. 總結:

    (1).所有例項在配置檔案載入時完成初始化

    (2).一個類在一個容器中只有一個例項(預設是單例模式)

2 set注入(重點,與set方法有直接關係)
  1. 依賴注入的概念:

    • 依賴: bean物件的建立依賴於容器
    • 注入:bean物件中的所有屬性,由容器注入
  2. 測試環境搭建

public class Teacher {
private String name;
private int age;
}


```java
public class Student {

    private String name;
    private Teacher teacher;
    private int age;
    private String wife;
    private Properties info;
    private List<String> bookList;
    private String[] friends;
    private Set<String> things;//compared to list collection,the item of set can't be repeat.
    private Map<String,Object> eductationHistory;
}

幾個集合的區別:

(1).list和陣列:list是動態伸縮的,而陣列不是

(2).list和set:set不能重複,list可以重複

  1. 使用配置檔案進行配置

    <bean id="teacher" class="com.guan.bean.Teacher">
        <property name="name" value="蔡老師"></property>
        <property name="age" value="5"></property>
    </bean>
    
    <bean id="student" class="com.guan.bean.Student">
    
        <property name="name" value="小明"></property>
        <!--        1.class-->
        <property name="teacher" ref="teacher"></property>
    
        <property name="age" value="23"></property>
        <!--        2.null-->
        <property name="wife"><null></null></property>
        <!--        3.properties-->
        <property name="info">
            <props>
                <prop key="喜歡的歌手">許嵩</prop>
                <prop key="可能喜歡的事">寫程式碼</prop>
            </props>
        </property>
        <!--        4.List-->
        <property name="bookList">
            <list>
                <value>飄</value>
                <value>百年孤獨(最近在看)</value>
            </list>
        </property>
        <!--        5.array-->
        <property name="friends">
            <array>
                <value>小王</value>
                <value>小紅</value>
                <value>小火</value>
            </array>
        </property>
        <!--        6.set-->
        <property name="things">
            <set>
                <value>敲程式碼</value>
                <value>敲程式碼</value>
                <value>敲程式碼</value>
            </set>
        </property>
        <!--        7.Map-->
        <property name="eductationHistory">
            <map>
                <entry key="小學" value="五里屯"></entry>
                <entry key="初中" value="張家口"></entry>
                <entry key="高中" value="三門星"></entry>
            </map>
        </property>
    </bean>
    

    注意:

    (1).空值是通過標籤<null/>

    (2).properties是通過標籤<props/><prop>組合在一起配置的

    (3),map的value值寫在<entry>標籤

3 其他方式
  1. p名稱空間(property):可以直接在<bean>的像id一樣賦值(通過set方法)
  2. c名稱空間(construct):同上,只是使用的函式方式不同(通過construct方法)

注意:需要先匯入名稱空間