1. 程式人生 > >spring配置(2)依賴注入

spring配置(2)依賴注入

bean.xml

<?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">

    <!-- spring中的依賴注入
        依賴注入:
            Dependency Injection
        IOC的作用:
            降低程式間的耦合(依賴關係)
        依賴關係的管理:
            以後都交給spring來維護
        在當前類需要用到其他類的物件,由spring為我們提供,我們只需要在配置檔案中說明
        依賴關係的維護:
            就稱之為依賴注入。
         依賴注入:
            能注入的資料:有三類
                基本型別和String
                其他bean型別(在配置檔案中或者註解配置過的bean)
                複雜型別/集合型別
             注入的方式:有三種
                第一種:使用建構函式提供
                第二種:使用set方法提供
                第三種:使用註解提供(明天的內容)
     -->


    <!--建構函式注入:
        使用的標籤:constructor-arg
        標籤出現的位置:bean標籤的內部
        標籤中的屬性
            type:用於指定要注入的資料的資料型別,該資料型別也是建構函式中某個或某些引數的型別
            index:用於指定要注入的資料給建構函式中指定索引位置的引數賦值。索引的位置是從0開始
            name:用於指定給建構函式中指定名稱的引數賦值                                        常用的
            =============以上三個用於指定給建構函式中哪個引數賦值===============================
            value:用於提供基本型別和String型別的資料
            ref:用於指定其他的bean型別資料。它指的就是在spring的Ioc核心容器中出現過的bean物件

        優勢:
            在獲取bean物件時,注入資料是必須的操作,否則物件無法建立成功。
        弊端:
            改變了bean物件的例項化方式,使我們在建立物件時,如果用不到這些資料,也必須提供。
    -->
    <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
        <constructor-arg name="name" value="泰斯特"></constructor-arg>
        <constructor-arg name="age" value="18"></constructor-arg>
        <constructor-arg name="birthday" ref="now"></constructor-arg>
    </bean>

    <!-- 配置一個日期物件 -->
    <bean id="now" class="java.util.Date"></bean>

    <!-- set方法注入                更常用的方式
        涉及的標籤:property
        出現的位置:bean標籤的內部
        標籤的屬性
            name:用於指定注入時所呼叫的set方法名稱
            value:用於提供基本型別和String型別的資料
            ref:用於指定其他的bean型別資料。它指的就是在spring的Ioc核心容器中出現過的bean物件
        優勢:
            建立物件時沒有明確的限制,可以直接使用預設建構函式
        弊端:
            如果有某個成員必須有值,則獲取物件是有可能set方法沒有執行。
    -->
    <bean id="accountService2" class="com.itheima.service.impl.AccountServiceImpl2">
        <property name="name" value="TEST" ></property>
        <property name="age" value="21"></property>
        <property name="birthday" ref="now"></property>
    </bean>


    <!-- 複雜型別的注入/集合型別的注入
        用於給List結構集合注入的標籤:
            list array set
        用於個Map結構集合注入的標籤:
            map  props
        結構相同,標籤可以互換
    -->
    <bean id="accountService3" class="com.itheima.service.impl.AccountServiceImpl3">
        <property name="myStrs">
            <set>
                <value>AAA</value>
                <value>BBB</value>
                <value>CCC</value>
            </set>
        </property>

        <property name="myList">
            <array>
                <value>AAA</value>
                <value>BBB</value>
                <value>CCC</value>
            </array>
        </property>

        <property name="mySet">
            <list>
                <value>AAA</value>
                <value>BBB</value>
                <value>CCC</value>
            </list>
        </property>

        <property name="myMap">
            <props>
                <prop key="testC">ccc</prop>
                <prop key="testD">ddd</prop>
            </props>
        </property>

        <property name="myProps">
            <map>
                <entry key="testA" value="aaa"></entry>
                <entry key="testB">
                    <value>BBB</value>
                </entry>
            </map>
        </property>
    </bean>