Spring-注入集合

注入集合

你已经看到如何使用value属性来配置基本数据类型和在你的bean配置文件中使用<property>标签的ref属性来配置对象引用。

现在如果想传递多个值,如Java Collection类型的List,Set,Map和Properties,应该怎么做呢?为了处理这种情况,Spring提供了四中类型的集合的配置元素,如下所示:

  1. <list> 注入一列值,允许重复
  2. <set> 有助于连线一组值,但不能重复
  3. <map> 可以用来注入名称-值对的集合,其中名称和值可以是任何类型
  4. <props> 可以用来注入名称-值对的集合,其中名称和值都是字符串类型

 JavaCollection.java文件的内容:

package com.tuorialsponit;
import java.util.List;
import java.util.Set;
import java.util.Map;
import java.util.Properties;

public class JavaCollection {
    private List addressList;
    private Set addressSet;
    private Map addressMap;
    private Properties addressProp;
    public List getAddressList() {
        return addressList;
    }
    public void setAddressList(List addressList) {
        this.addressList = addressList;
    }
    public Set getAddressSet() {
        return addressSet;
    }
    public void setAddressSet(Set addressSet) {
        this.addressSet = addressSet;
    }
    public Map getAddressMap() {
        return addressMap;
    }
    public void setAddressMap(Map addressMap) {
        this.addressMap = addressMap;
    }
    public Properties getAddressProp() {
        return addressProp;
    }
    public void setAddressProp(Properties addressProp) {
        this.addressProp = addressProp;
    }
}

下面是bean.xml中的内容:

<bean id="javaCollection" class="com.tuorialsponit.JavaCollection">
         <property name="addressList">
             <list>
             <value>INDIA</value>
            <value>Pakistan</value>
            <value>USA</value>
            <value>USA</value>
             </list>
         </property>
         
         <property name="addressSet">
         <set>
            <value>INDIA</value>
            <value>Pakistan</value>
            <value>USA</value>
            <value>USA</value>
        </set>
      </property>

      <!-- results in a setAddressMap(java.util.Map) call -->
      <property name="addressMap">
         <map>
            <entry key="1" value="INDIA"/>
            <entry key="2" value="Pakistan"/>
            <entry key="3" value="USA"/>
            <entry key="4" value="USA"/>
         </map>
      </property>
      
      <property name="addressProp">
         <props>
            <prop key="one">INDIA</prop>
            <prop key="two">Pakistan</prop>
            <prop key="three">USA</prop>
            <prop key="four">USA</prop>
         </props>
      </property>
     </bean>

MainApp.java中的内容:

public class MainApp {
    public static void main(String[] args){
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        JavaCollection jc = (JavaCollection) context.getBean("javaCollection");
        System.out.println(jc.getAddressList());
        System.out.println(jc.getAddressSet());
        System.out.println(jc.getAddressMap());
        System.out.println(jc.getAddressProp());
    }
}

运行结果:

注入Bean引用

下面的Bean定义将帮助你理解如何注入bean的引用作为集合元素。甚至你可以将引用和值混合在一起,如下所示:

<property name="addressList">
             <list>
             <ref bean="helloIndia"/>
             <value>INDIA</value>
            <value>Pakistan</value>
            <value>USA</value>
            <value>USA</value>
             </list>
 </property>

<bean id="helloIndia" class="com.tuorialsponit.HelloIndia" parent="beanTemplate">
         <property name="message1" value="hello India"></property>
         <property name="message3" value="Namaste India"></property>
 </bean>

为了使用上面的bean定义,你需要定义setter方法,它们应该也是能够用这种方式处理引用。

注入null和空字符串的值

如果你需要传递一个空字符串作为值,那么可以像如下方式这样传递它:

<bean id="helloIndia" class="com.tuorialsponit.HelloIndia" parent="beanTemplate">
         <property name="message1" value="hello India"></property>
         <property name="message3" value=""></property>
 </bean>

如果你需要传递一个NULL值,那么你可以传递它,如下所示:

<bean id="helloIndia" class="com.tuorialsponit.HelloIndia" parent="beanTemplate">
         <property name="message1" value="hello India"></property>
         <property name="message3"><null/></property>
 </bean>
原文地址:https://www.cnblogs.com/fangpengchengbupter/p/7818776.html