Spring各類集合注入

原文:Spring各類集合注入
摘要: 我們常在Spring的Bean中注入各種基本類型的值和對(duì)象引用,如果需要注入List,Map,Set和數(shù)組等集合類型時(shí),又該如何配置呢?
先定義一個(gè)測(cè)試類,由于本文將要介紹注入各種集合時(shí)如何配置,故這個(gè)類包含各種集合,類名和屬性名不好取,沒有特殊含義:
public class Test { private List<String> listTest; private Map<String, Object> mapTest; private Set setTest; private String[] arrayTest; private Properties propertiesTest; //下面是各個(gè)屬性的setter,此處省略 //......}
Test類中,分別定義了List,Map,Set,Array等5種集合類型的屬性,下面在Spring配置文件中,分別為這些類型的屬性注入值:
`<bean id="test" class="com.abc.Test">

<property name="listTest">

<list>

<value>ListA</value>
<value>ListB</value>
<value>ListC</value>
</list>
</property>

<!-- Map類型的屬性 -->
<property name="mapTest">
    <!-- 為map類型的屬性注入值時(shí),使用<map>元素 -->
    <map>
        <!-- 每一個(gè)<entry>都為<map>配置一個(gè)K-V對(duì),同樣, -->
        <entry key="key1" value="value1" />
        <!-- 下面這個(gè)value指向了在此Spring文件中定義的另一個(gè)叫object的Bean -->
        <entry key="key2" value-ref="object" />
    </map>
</property>

<!-- Set類型的屬性 -->
<property name="setTest">
    <!-- 為set類型的屬性注入值時(shí),使用<set>元素 -->
    <set>
        <!-- 只要類型滿足,每個(gè)<value>,<ref>,<bean>都可以配置一個(gè)list的元素 -->
        <value>SetA</value>
        <!-- 下面是一個(gè)嵌套Bean的定義。關(guān)于什么是嵌套Bean,請(qǐng)看:http://my.oschina.net/itblog/blog/204378 -->
        <bean class="com.abc.OtherBean1" />
        <!-- 下面引用了此Spring文件中定義的另一個(gè)Bean -->
        <ref local="com.abc.OtherBean2" />
    </set>
</property>

<!-- Properties類型的屬性 -->
<property name="propertiesTest">
    <props>
        <!-- 每個(gè)<prop>元素指定一個(gè)屬性項(xiàng),其中key指定屬性名 -->
        <prop key="prop1">value1</prop>
        <prop key="prop2">value2</prop>
    </props>
</property>

<!-- 數(shù)組類型的屬性 -->
<property name="arrayTest">
    <!-- 為數(shù)組類型的屬性注入值時(shí),使用<list>元素 -->
    <list>
        <!-- 只要類型滿足,每個(gè)<value>,<ref>,<bean>都可以配置一個(gè)list的元素 -->
        <value>Array1</value>
        <bean class="com.abc.OtherBean1" />
        <ref local="com.abc.OtherBean2" />
    </list>
</property>

</bean>`

由于集合元素有可以是基本類型值、引用容器中其他Bean、嵌套Bean或集合屬性等,因此<list>、<set>、和<key>元素又可以接受如下的子元素:

  • value:指定集合元素是基本數(shù)據(jù)類型值或字符串類型值
  • ref:指定集合元素是容器中另一個(gè)Bean實(shí)例
  • bean:指定集合元素是一個(gè)嵌套Bean
  • list、set、map及props:指定集合元素值又是集合

<props>元素適用于配置Properties類型的屬性,Properties類型時(shí)一種特殊的類型,其key和value都只能是字符串,故Spring配置Properties類型的屬性都比較簡(jiǎn)單:每個(gè)屬性項(xiàng)只要分別給出屬性名和屬性值就足夠了。

當(dāng)使用<map>元素配置Map類型屬性時(shí)稍顯復(fù)雜,因?yàn)镸ap類型的元素由多個(gè)<entry>組成,每個(gè)<entry>又需要配置key和value兩個(gè)屬性。其中<entry>屬性支持以下幾個(gè)屬性:

  • key:當(dāng)key是基本類型或字符串時(shí)使用

  • key-ref:當(dāng)key類型是容器中定義的另一個(gè)Bean時(shí)使用

  • value:當(dāng)value是基本類型或字符串時(shí)使用

  • value-ref:當(dāng)value是容器中定義的另一個(gè)Bean時(shí)使用

    Spring還提供了一個(gè)簡(jiǎn)化語(yǔ)法來支持Properties形參的setter方法,例如我們可以使用如下配置片段來配置Properties類型的屬性:

<property name="propertiesTest"> <value> key1=value1 key2=value2 </value> </property>

雖然這種配置方式更簡(jiǎn)單,但是它也有一個(gè)缺點(diǎn):屬性名、屬性值都只能是英文或數(shù)字,不能包含中文字符

從Spring2開始,Spring IoC容器支持集合的合并:子Bean中的集合屬性可以從其父Bean的集合屬性繼承而來,同時(shí),子Bean中的屬性會(huì)覆蓋父Bean中屬性名相同的值。也就是說,子Bean的集合屬性的最終值是父Bean、子Bean合并后的最終結(jié)果,下面是一個(gè)示例:
``
<bean id="parent" abstract="true" class="com.abc.Parent"> <property name="websites"> <props> <prop key="baidu">www.baidu.com</props> <prop key="google">www.google.com.hk</prop> <props> </property> </bean>
<bean id="child" parent="parent"> <property name="websites"> <props merge="true"> <prop key="google">www.google.com</prop> <prop key="tencent">www.qq.com</prop> <props> </property> </bean>
通過上面的配置后,child中的屬性將變?yōu)椋?br> baidu=www.baidu.com google=www.google.com tencent=www.qq.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,275評(píng)論 6 342
  • 文章作者:Tyan博客:noahsnail.com 3.4 Dependencies A typical ente...
    SnailTyan閱讀 4,503評(píng)論 2 7
  • 文章作者:Tyan博客:noahsnail.com 3.4 依賴 標(biāo)準(zhǔn)企業(yè)應(yīng)用不會(huì)由一個(gè)對(duì)象(或Spring用語(yǔ)中...
    SnailTyan閱讀 1,267評(píng)論 0 1
  • 從完全進(jìn)入考研復(fù)習(xí)已經(jīng)過了幾個(gè)月,日復(fù)一日幾乎無差別的生活時(shí)常使我捫心自問,這到底有無意義?自己勝算幾何?不得不承...
    孟迪_閱讀 221評(píng)論 0 0

友情鏈接更多精彩內(nèi)容