1. 程式人生 > >Spring依賴注入(構造引數注入、集合,陣列屬性注入、XML自動注入 ,全註解配置)

Spring依賴注入(構造引數注入、集合,陣列屬性注入、XML自動注入 ,全註解配置)

依賴注入

構造引數注入        --> 常用的是方案一和方案二         MyBean類  YouBean類

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--  方案一:根據構造器引數的順序(索引)注入   索引開始為0
         constructor-arg:構造器中的引數
            index:引數位置 / name:引數名稱 / type:型別
            value:引數的值 / ref:引用其它的bean
    -->
    <bean id="myBean" class="com.zhengqing._02_constructor.MyBean">
        <constructor-arg index="0" value="鄭清" />
        <constructor-arg index="1"  value="18" />
    </bean>

    <!--  方案二:根據構造器引數的名稱注入   注意:名稱必須一致
    <bean id="myBean" class="com.zhengqing._02_constructor.MyBean">
        <constructor-arg name="name" value="鄭清" />
        <constructor-arg name="age"  value="18" />
    </bean>-->

    <!-- 方案三:根據構造器的型別注入
    <bean id="myBean" class="com.zhengqing._02_constructor.MyBean">
        <constructor-arg type="java.lang.String" value="鄭清" />
        <constructor-arg type="java.lang.Integer" value="18" />
    </bean>
    -->

    <!--
    <bean id="myBean" class="com.zhengqing._02_constructor.MyBean">
        <constructor-arg value="鄭清" />
        <constructor-arg value="46" />
    </bean>-->

    <!-- 如果有一個引數是我們自己的一個物件,怎麼解決??    YouBean:為另外一個bean類 -->
    <!--方法一:先在外面定義
     <bean id="youBean" class="com.zhengqing._02_constructor.YouBean" />
     <bean id="myBean" class="com.zhengqing._02_constructor.MyBean">
         <constructor-arg value="鄭清" />
         <constructor-arg value="18" />
         <constructor-arg ref="youBean" />
     </bean>
     方法二:使用一個內部的Bean完成(不需要加id)
    <bean id="myBean" class="com.zhengqing._02_constructor.MyBean">
        <constructor-arg value="鄭清" />
        <constructor-arg value="18" />
        <constructor-arg>
            <bean class="com.zhengqing._02_constructor.YouBean" />
        </constructor-arg>
    </bean>
    -->

</beans>

其它簡單、集合屬性注入     MyBean類

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="otherBean" class="com.zhengqing._03_di.OtherBean" />
    <!--
        property:屬性(setXxx)
            name:屬性名稱
            value:屬性值  / ref:引入屬性值
    -->
    <bean id="myBean" class="com.zhengqing._03_di.MyBean">
        <property name="id" value="1" />
        <property name="name" value="鄭清" />
        <property name="sex" value="true" />
        <property name="salary" value="10000" />
        <!-- private List<OtherBean> otherBeanList;  -有順,可以重複 -->
        <property name="otherBeanList">
            <list>
                <ref bean="otherBean" />
                <ref bean="otherBean" />
                <bean class="com.zhengqing._03_di.OtherBean" />
                <bean class="com.zhengqing._03_di.OtherBean" />
            </list>
        </property>
        <!-- private Set<OtherBean> otherBeanSet;   -無序,不可以重複 -->
        <property name="otherBeanSet">
            <set>
                <ref bean="otherBean" />
                <ref bean="otherBean" />
                <bean class="com.zhengqing._03_di.OtherBean" />
                <bean class="com.zhengqing._03_di.OtherBean" />
            </set>
        </property>
        <!-- private Set<String> set; -->
        <property name="set">
            <set>
                <value>123</value>
                <value>ABC</value>
                <value>資料String</value>
            </set>
        </property>
        <!--  private List<String> set;   這種情況雖然不會報錯,但不建議使用!!
        <property name="list">
            <list>
                <value>123</value>
                <value>ABC</value>
                <value>資料String</value>
            </list>
        </property> -->
        <!--
          String[] arrays  -陣列
        <property name="arrays">
            <array>
                <value>資料1</value>
                <value>資料2</value>
                <value>資料3</value>
            </array>
        </property>
        -->
        <property name="arrays" value="資料1,資料2,資料3"></property>
        <!-- Properties props1:標準寫法(支援中文) -->
        <property name="props1">
           <props>
               <prop key="dirverName">mysql</prop>
               <prop key="url">3306</prop>
               <prop key="username">root</prop>
               <prop key="password">admin支援中文</prop>
           </props>
        </property>
        <!-- Properties props2:簡寫方式  -->
        <property name="props2">
            <value>
                dirvenName=mysql
                url=3306
                username=root
                password=admin不支援中文
            </value>
        </property>
    </bean>
</beans>

XML自動注入

全註解配置

  @Component  普通倉庫 
  @Repository  倉庫(就是dao層) 
  @Service service層 
  @Controller  控制層(servlet、action)

第一步: 配置 讓Spring掃描類與支援註解
第二步:在類裡面加上註解
第三步:註解配置bean的名稱(如果介面有兩個實現會出問題,如何解決??         -- >為dao生成的bean加上名稱,我們在呼叫的時候確定名稱即可)
第四步:呼叫名稱【方案一:使用@Autowired            方案二:使用@Resource】

ex:1個實現介面類的情況

2個實現介面類的情況