首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring 框架中 Bean 集合注入完整指南:List、Set、Map 與 Properties 配置詳解

     編輯:Java 相關知識

Spring 集合注入概述

在 Spring 框架中,除了使用 value 屬性注入單一值、用 ref 屬性注入 Bean 參考外,還經常需要將多個值注入到集合類型的屬性中。Spring 提供了四種集合配置元素來支援 Java Collection 類型:<list>、<set>、<map> 和 <props>,分別對應 List、Set、Map 和 Properties。

基本集合注入範例

1. 定義包含集合屬性的 Java 類

package com.example.spring.collection;

import java.util.*;

public class JavaCollection {
    private List<String> addressList;
    private Set<String> addressSet;
    private Map<String, String> addressMap;
    private Properties addressProp;

    // Setter 方法
    public void setAddressList(List<String> addressList) { this.addressList = addressList; }
    public void setAddressSet(Set<String> addressSet) { this.addressSet = addressSet; }
    public void setAddressMap(Map<String, String> addressMap) { this.addressMap = addressMap; }
    public void setAddressProp(Properties addressProp) { this.addressProp = addressProp; }

    // Getter 並列印內容
    public List<String> getAddressList() {
        System.out.println("List Elements: " + addressList);
        return addressList;
    }
    public Set<String> getAddressSet() {
        System.out.println("Set Elements: " + addressSet);
        return addressSet;
    }
    public Map<String, String> getAddressMap() {
        System.out.println("Map Elements: " + addressMap);
        return addressMap;
    }
    public Properties getAddressProp() {
        System.out.println("Properties Elements: " + addressProp);
        return addressProp;
    }
}

2. Spring XML 配置文件 (beans.xml)

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

    <bean id="javaCollection" class="com.example.spring.collection.JavaCollection">
        <!-- List 注入:允許重複值 -->
        <property name="addressList">
            <list>
                <value>Taiwan</value>
                <value>Japan</value>
                <value>USA</value>
                <value>USA</value>
            </list>
        </property>

        <!-- Set 注入:自動去重 -->
        <property name="addressSet">
            <set>
                <value>Taiwan</value>
                <value>Japan</value>
                <value>USA</value>
                <value>USA</value>
            </set>
        </property>

        <!-- Map 注入:鍵值對 -->
        <property name="addressMap">
            <map>
                <entry key="1" value="Taiwan"/>
                <entry key="2" value="Japan"/>
                <entry key="3" value="USA"/>
                <entry key="4" value="USA"/>
            </map>
        </property>

        <!-- Properties 注入:鍵值對皆為字串 -->
        <property name="addressProp">
            <props>
                <prop key="one">Taiwan</prop>
                <prop key="two">Japan</prop>
                <prop key="three">USA</prop>
                <prop key="four">USA</prop>
            </props>
        </property>
    </bean>
</beans>

3. 執行結果

List Elements: [Taiwan, Japan, USA, USA]
Set Elements: [Taiwan, Japan, USA]
Map Elements: {1=Taiwan, 2=Japan, 3=USA, 4=USA}
Properties Elements: {two=Japan, one=Taiwan, three=USA, four=USA}

注意:List 保留重複值與順序,Set 自動去重,Map 與 Properties 僅存儲鍵值對,Properties 的鍵值皆為字串類型。

注入 Bean 參考到集合中

集合元素不僅可以是字面值,也可以是其他 Bean 的參考,甚至混合使用:

<bean id="address1" class="com.example.Address">
    <property name="city" value="Taipei"/>
</bean>
<bean id="address2" class="com.example.Address">
    <property name="city" value="Tokyo"/>
</bean>

<bean id="javaCollection" class="com.example.spring.collection.JavaCollection">
    <property name="addressList">
        <list>
            <ref bean="address1"/>
            <ref bean="address2"/>
            <value>Japan</value>
        </list>
    </property>
    <property name="addressSet">
        <set>
            <ref bean="address1"/>
            <ref bean="address2"/>
            <value>Japan</value>
        </set>
    </property>
    <property name="addressMap">
        <map>
            <entry key="one" value="Taiwan"/>
            <entry key="two" value-ref="address1"/>
            <entry key="three" value-ref="address2"/>
        </map>
    </property>
</bean>

注入 null 與空字串

空字串

<bean id="exampleBean" class="com.example.ExampleBean">
    <property name="email" value=""/>
</bean>

等同於 Java 代碼:exampleBean.setEmail("")

null 值

<bean id="exampleBean" class="com.example.ExampleBean">
    <property name="email"><null/></property>
</bean>

等同於 Java 代碼:exampleBean.setEmail(null)

總結

  • <list>:有序、可重複,對應 java.util.List 或陣列
  • <set>:無序、不重複,對應 java.util.Set
  • <map>:鍵值對,鍵值類型任意,對應 java.util.Map
  • <props>:鍵值對,鍵值皆為字串,對應 java.util.Properties

善用集合注入可大幅簡化配置,讓 Bean 之間的關係更清晰易維護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved