spring中基於XML的依賴注入配置

依賴注入:Dependency Injection
       IOC的作用:降低程序間的耦合(依賴關係)
       依賴關係的管理:交給spring來維護
       在當前類需要用到其他類的對象,由spring提供,我們只需要在配置文件中說明。
       依賴關係的維護就稱之爲依賴注入。

依賴注入的方式

第一種:使用構造函數注入

User實體類中的屬性爲: String userName; int age;Date date;沒有提供默認構造函數

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

優勢:
       在獲取bean對象時,注入數據是必須的操作,否則對象無法創建成功。
弊端:
       改變了bean對象的實例化方式,使我們在創建對象時,如果用不到這些數據,也必須提供。

<?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="user" class="cn.td.domain.User" scope="singleton">
        <constructor-arg name="userName" value="張三"/>
        <constructor-arg name="age" value="18"/>
        <constructor-arg name="date" ref="data"/>
    </bean>
    <bean id="data" class="java.util.Date"/>
</beans>

第二種:使用set方法注入

set方法注入更常用
涉及的標籤:property
出現的位置:bean標籤的內部
標籤的屬性
       name:用於指定注入時所調用的set方法名稱
       value:用於提供基本類型和String類型的數據
       ref:用於指定其他的bean類型數據。它指的就是在spring的Ioc核心容器中出現過的bean對象
優勢:
       創建對象時沒有明確的限制,可以直接使用默認構造函數
弊端:
       如果有某個成員必須有值,則獲取對象是有可能set方法沒有執行。

<?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="data" class="java.util.Date"/>

    <!--set注入-->
    <bean id="user" class="cn.td.domain.User" scope="singleton">
        <property name="userName" value="張三"/>
        <property name="age" value="18"/>
        <property name="date" ref="data"/>
    </bean>
</beans>

依賴注入的數據類型

基本類型和String

User實體類中的屬性爲: String userName; int age;

<bean id="user" class="cn.td.domain.User" scope="singleton">
    <constructor-arg name="userName" value="張三"/>
    <constructor-arg name="age" value="18"/>
</bean>

其他bean類型(在配置文件中或者註解配置過的bean)

User實體類中的屬性爲: String userName; int age;Date date;
其中,Date類型不是基本類型和String類型此時,應在配置文件中配置一個日期對象,然後再用ref引入

<bean id="user" class="cn.td.domain.User" scope="singleton">
   <constructor-arg name="userName" value="張三"/>
    <constructor-arg name="age" value="18"/>
    <constructor-arg name="date" ref="data"/>
</bean>
<bean id="data" class="java.util.Date"/>

複雜類型/集合類型

複雜類型/集合類型注入時,結構相同,標籤可以互換

User中的屬性
String[] strings; List list; Set set; Map<String,String> map; Properties prop;

用於給List結構集合注入的標籤: array list set
用於給數組注入

<!--數組注入-->
<bean id="user" class="cn.td.domain.User">
    <property name="strings">
        <array>
            <value>aaa</value>
            <value>bbb</value>
            <value>ccc</value>
        </array>
    </property>
</bean>

用於給List注入

<bean id="user" class="cn.td.domain.User">
    <property name="list">
        <list>
            <value>listaaa</value>
            <value>listbbb</value>
            <value>listccc</value>
        </list>
    </property>
</bean>

用於給set注入

<bean id="user" class="cn.td.domain.User">
    <property name="set">
        <list>
            <value>setaaa</value>
            <value>setbbb</value>
            <value>setccc</value>
        </list>
    </property>
</bean>

用於個Map結構集合注入的標籤: map props
用於給map注入

<bean id="user" class="cn.td.domain.User">
    <property name="map">
        <map>
            <entry key="mapA" value="mapa"/>
            <entry key="mapB" value="mapb"/>
            <entry key="mapC" value="mapc"/>
        </map>
    </property>
</bean>

用於給 props注入

<bean id="user" class="cn.td.domain.User">
    <property name="prop">
        <props>
            <prop key="propA">propa</prop>
            <prop key="propB">propb</prop>
            <prop key="propC">propc</prop>
        </props>
    </property>
</bean>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章