Spring在Bean中注入集合
以下内容引用自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中注入集合的更多相关文章
- spring IOC bean中注入集合
建立一个实体 package com.java.test4; import java.util.*; /** * @author nidegui * @create 2019-06-22 14:45 ...
- 在Spring的bean中注入HttpServletRequest解密
我们可以在Spring的bean中轻松的注入HttpServletRequest,使用@Autowired HttpServletRequest request;就可以了. 但是,为什么我们可以直接这 ...
- (转载)在spring的bean中注入内部类
原文链接:http://outofmemory.cn/java/spring/spring-DI-inner-class 在spring中注入内部类,有可能会遇到如下异常信息: 2014-5-14 2 ...
- spring IOC bean中注入bean
俩个实体 package com.java.test4; /** * @author nidegui * @create 2019-06-22 14:45 */ public class People ...
- Spring IOC容器中注入bean
一.基于schema格式的注入 1.基本的注入方式 (属性注入方式) 根据setXxx()方法进行依赖注入,Spring只会检查是否有setter方法,是否有对应的属性不做要求 <bean id ...
- 【转】spring 装配Bean中构造参数的注入
转载自:http://www.bianceng.cn/Programming/Java/201307/37027.htm spring 装配Bean中构造参数的注入 spring装配bean中还有一种 ...
- Spring在Thread中注入Bean无效的解决方式
在Spring项目中,有时需要新开线程完成一些复杂任务,而线程中可能需要注入一些服务.而通过Spring注入来管理和使用服务是较为合理的方式.但是若直接在Thread子类中通过注解方式注入Bean是无 ...
- spring中如何向一个单例bean中注入非单例bean
看到这个题目相信很多小伙伴都是懵懵的,平时我们的做法大都是下面的操作 @Component public class People{ @Autowired private Man man; } 这里如 ...
- spring给容器中注入组件的几种方式
目录 环境搭建 spring给容器中注入组件 1.包扫描+组件标注注解(@Controller/@Service/@Repository/@Component)适用于把自己写的类加入组件(默认ID类名 ...
随机推荐
- STATIC 和 CLASS
STATIC 和 CLASS 由 王巍 (@ONEVCAT) 发布于 2015/01/28 Swift 中表示 “类型范围作用域” 这一概念有两个不同的关键字,它们分别是 static 和 class ...
- CSS 布局经典问题初步整理
CSS 定位问题 主要就是经典的绝对定位,相对定位问题. 10个文档学布局:通过十个例子讲解布局,主要涉及相对布局,绝对布局,浮动. 百度前端学院笔记 – 理解绝对定位:文章本身一般,几篇参考文献比较 ...
- Qtopia移植
Qtopia 是Trolltech 公司为采用嵌入式Linux操作系统的消费电子设备而开发的综合应用平台, Qtopia包含完整的应用层.灵活的用户界面.窗口操作系统.应用程序启动程序以及开发框架.下 ...
- 细说unittest-2
一.unittest模块官方文档: https://docs.python.org/3/library/unittest.html 二.一张图看懂unittest: 三.Unittest主要方法属性: ...
- Hive和Hbase整合
Hive只支持insert和delete操作,并不支持update操作,所以无法实施更新hive里的数据,而HBASE正好弥补了这一点,所以在某些场景下需要将hive和hbase整合起来一起使用. 整 ...
- 杭电 1503 Advanced Fruits
Description The company "21st Century Fruits" has specialized in creating new sorts of fru ...
- Java的9种基本数据类型以及封装类
Java的9种基本数据类型以及封装类 基本类型 大小(单位/字节) 默认值 封装类 byte 1 (byte)0 Byte short 2 (short)0 Short int 4 0 Integer ...
- 基于FTP服务器搭建yum源
本例以CentOS6.8为试验对象,来搭建基于FTP服务器的yum源. 一.配置本地yum源 1.创建挂载目录/yum mkdir /yum 2.挂载镜像 mount -o loop CentOS- ...
- PTA 07-图6 旅游规划 (25分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/717 5-9 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路 ...
- 九度oj 1011
题目描述: 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= ...