以下内容引用自http://wiki.jikexueyuan.com/project/spring/injecting-collection.html

如果你想传递多个值,如Java Collection类型List、Set、Map和Properties,Spring 提供了四种类型的集合的配置元素,如下所示:

元素 描述
<list> 它有助于连线,如注入一列值,允许重复。
<set> 它有助于连线一组值,但不能重复。
<map> 它可以用来注入键值对的集合,其中键和值可以是任何类型。
<props> 它可以用来注入键值对的集合,其中键和值都是字符串类型。

您可以使用<list>或<set>来连接java.util.Collection的任何实现或数组。您将遇到两种情况(a)传递集合的直接值,(b)将bean的引用作为集合元素之一传递。

例子:

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.jsoft.testspring</groupId>
<artifactId>testinjectioncollection</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>testinjectioncollection</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency> <!-- Spring Core -->
<!-- http://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.4.RELEASE</version>
</dependency> <!-- Spring Context -->
<!-- http://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
</dependencies>
</project>

JavaCollection.java:

package com.jsoft.testspring.testinjectioncollection;

import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set; public class JavaCollection {
private List addressList;
private Set addressSet;
private Map addressMap;
private Properties addressProp; public void setAddressList(List addressList) {
this.addressList = addressList;
} public List getAddressList() {
System.out.println("List :" + addressList);
return addressList;
} public void setAddressSet(Set addressSet) {
this.addressSet = addressSet;
} public Set getAddressSet() {
System.out.println("Set :" + addressSet);
return addressSet;
} public void setAddressMap(Map addressMap) {
this.addressMap = addressMap;
} public Map getAddressMap() {
System.out.println("Map :" + addressMap);
return addressMap;
} public void setAddressProp(Properties addressProp) {
this.addressProp = addressProp;
} public Properties getAddressProp() {
System.out.println("Property :" + addressProp);
return addressProp;
}
}

beans.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"> <bean id="javaCollection" class="com.jsoft.testspring.testinjectioncollection.JavaCollection"> <!-- list -->
<property name="addressList">
<list>
<value>INDIA</value>
<value>Pakistan</value>
<value>USA</value>
<value>USA</value>
</list>
</property> <!-- set -->
<property name="addressSet">
<set>
<value>INDIA</value>
<value>Pakistan</value>
<value>USA</value>
<value>USA</value>
</set>
</property> <!-- map -->
<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 -->
<property name="addressProp">
<props>
<prop key="one">INDIA</prop>
<prop key="one">INDIA</prop>
<prop key="two">Pakistan</prop>
<prop key="three">USA</prop>
<prop key="four">USA</prop>
</props>
</property>
</bean> </beans>

App.java:

package com.jsoft.testspring.testinjectioncollection;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
JavaCollection jc=(JavaCollection)context.getBean("javaCollection"); jc.getAddressList();
jc.getAddressSet();
jc.getAddressMap();
jc.getAddressProp();
}
}

运行结果:

注入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="address1" class="com.jsoft.testspring.testinjectioncollection.Address"></bean>
<bean id="address2" class="com.jsoft.testspring.testinjectioncollection.Address"></bean>

<bean id="javaCollection" class="com.jsoft.testspring.testinjectioncollection.JavaCollection"> <!-- list -->
<property name="addressList">
<list>
<value>INDIA</value>
<value>Pakistan</value>
<value>USA</value>
<value>USA</value>
<ref bean="address1"/>
<ref bean="address2"/>

</list>
</property> <!-- set -->
<property name="addressSet">
<set>
<value>INDIA</value>
<value>Pakistan</value>
<value>USA</value>
<value>USA</value>
<ref bean="address1"/>
<ref bean="address2"/>

</set>
</property> <!-- map -->
<property name="addressMap">
<map>
<entry key="1" value="INDIA" />
<entry key="2" value="Pakistan" />
<entry key="3" value="USA" />
<entry key="4" value="USA" />
<entry key="5" value-ref="address1" />
<entry key="6" value-ref="address2" />

</map>
</property> <!-- property -->
<property name="addressProp">
<props>
<prop key="one">INDIA</prop>
<prop key="one">INDIA</prop>
<prop key="two">Pakistan</prop>
<prop key="three">USA</prop>
<prop key="four">USA</prop>
</props>
</property> </bean> </beans>

可以看出,除了property类型外,全部都可以注入bean。因为property类型键值都只能是字符串类型,所以没办法使用对象。

注入null或空字符串的值:

如果你需要传递一个空字符串作为值,那么你可以传递它,如下所示:

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

前面的例子相当于Java代码:exampleBean.setEmail("")。

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

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

前面的例子相当于Java代码:exampleBean.setEmail(null)。

测试工程:https://github.com/easonjim/5_java_example/tree/master/springtest/test10/testinjectioncollection

Spring在Bean中注入集合的更多相关文章

  1. spring IOC bean中注入集合

    建立一个实体 package com.java.test4; import java.util.*; /** * @author nidegui * @create 2019-06-22 14:45 ...

  2. 在Spring的bean中注入HttpServletRequest解密

    我们可以在Spring的bean中轻松的注入HttpServletRequest,使用@Autowired HttpServletRequest request;就可以了. 但是,为什么我们可以直接这 ...

  3. (转载)在spring的bean中注入内部类

    原文链接:http://outofmemory.cn/java/spring/spring-DI-inner-class 在spring中注入内部类,有可能会遇到如下异常信息: 2014-5-14 2 ...

  4. spring IOC bean中注入bean

    俩个实体 package com.java.test4; /** * @author nidegui * @create 2019-06-22 14:45 */ public class People ...

  5. Spring IOC容器中注入bean

    一.基于schema格式的注入 1.基本的注入方式 (属性注入方式) 根据setXxx()方法进行依赖注入,Spring只会检查是否有setter方法,是否有对应的属性不做要求 <bean id ...

  6. 【转】spring 装配Bean中构造参数的注入

    转载自:http://www.bianceng.cn/Programming/Java/201307/37027.htm spring 装配Bean中构造参数的注入 spring装配bean中还有一种 ...

  7. Spring在Thread中注入Bean无效的解决方式

    在Spring项目中,有时需要新开线程完成一些复杂任务,而线程中可能需要注入一些服务.而通过Spring注入来管理和使用服务是较为合理的方式.但是若直接在Thread子类中通过注解方式注入Bean是无 ...

  8. spring中如何向一个单例bean中注入非单例bean

    看到这个题目相信很多小伙伴都是懵懵的,平时我们的做法大都是下面的操作 @Component public class People{ @Autowired private Man man; } 这里如 ...

  9. spring给容器中注入组件的几种方式

    目录 环境搭建 spring给容器中注入组件 1.包扫描+组件标注注解(@Controller/@Service/@Repository/@Component)适用于把自己写的类加入组件(默认ID类名 ...

随机推荐

  1. fshc之请求仲裁机制(from mcu and cache)

    1.arbiter模块本身放在sclk时钟域,但是输入都是来之HCLK时钟域. 2.当MCU/CACHE访问FSHC时,FSHC不接受其他请求,FSHC只可以同时处理一个请求的操作. 3.如果原子操作 ...

  2. Django之学员管理一

    Django之学员管理一 建表结构: #班级表class: id title 1 五年一班 2 五年二班 3 五年三班 4 五年四班 #学生表student: id name 班级ID(FK外键) 1 ...

  3. 零基础学Python不迷茫——基本学习路线及教程!

    什么是Python? 在过去的2018年里,Python成功的证明了它自己有多火,它那“简洁”与明了的语言成功的吸引了大批程序员与大数据应用这的注意,的确,它的实用性的确是配的上它的热度.   Pyt ...

  4. LeetCode(114) Flatten Binary Tree to Linked List

    题目 分析 按要求转换二叉树: 分析转换要求,发现,新的二叉树是按照原二叉树的先序遍历结果构造的单支二叉树(只有右子树). 发现规则,便容易处理了.得到先序遍历,构造即可. AC代码 /** * De ...

  5. Educational Codeforces Round 32:E. Maximum Subsequence(Meet-in-the-middle)

    题目链接:E. Maximum Subsequence 用了一个Meet-in-the-middle的技巧,还是第一次用到这个技巧,其实这个技巧和二分很像,主要是在dfs中,如果数量减小一半可以节约很 ...

  6. Head First HTML5 Programming笔记--chapter2 介绍Javascript和DOM

    你已经了解了HTML标记(也称为结构),而且知道了CSS样式(也称为表示),剩下的就是Javascript(也称为行为). JavaScript的工作方式 1. 编写 你创建HTML标记和JavaSc ...

  7. C#-dynamic参考

    dynamic 类型的作用是绕过编译时类型检查,改为在运行时进行解析. dynamic 类型简化了对 COM API(例如 Office Automation API).动态 API(例如 IronP ...

  8. 九度oj 题目1048:判断三角形类型

    题目描述: 给定三角形的三条边,a,b,c.判断该三角形类型. 输入: 测试数据有多组,每组输入三角形的三条边. 输出: 对于每组输入,输出直角三角形.锐角三角形.或是钝角三角形. 样例输入: 3 4 ...

  9. 【Luogu】P1005矩阵取数游戏(高精度+DP)

    题目链接 yeah终于过辣! DP,f[i][j]表示每行还剩i到j这个区间的数没取的时候的值.借这个题我也把高精度的短板弥补了一下,以后高精加高精乘应该是没问题了. 哇终于不怂高精了…… 放上代码. ...

  10. [UOJ#130][BZOJ4198][Noi2015]荷马史诗

    [UOJ#130][BZOJ4198][Noi2015]荷马史诗 试题描述 追逐影子的人,自己就是影子. ——荷马 Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静 ...