SpringFramework|基于XML的各类集合注入
环境交代
Java:
1.8
Maven:
3
SpringFramework版本以及各组件成员:
5.1.1.RELEASE
- spring-context
- spring-core
- spring-beans
背景
现在如果你想传递多个值,如 Java Collection 类型 List、Set、Map 和 Properties,应该怎么做呢。为了处理这种情况,Spring 提供了四种类型的集合的配置元素,如下所示:
元素 | 描述 |
---|---|
<list> | 它有助于关联一组值,如注入一列值,允许重复。 |
<set> | 它有助于关联一组值,但不能重复。 |
<map> | 它可以用来注入名称-值对的集合,其中名称和值可以是任何类型。 |
<props> | 它可以用来注入名称-值对的集合,其中名称和值都是字符串类型。 |
你可以使用
<list>
或<set>
来连接任何java.util.Collection
的实现或数组。你会遇到两种情况:
- (a)传递集合中直接的值
- (b)传递一个 bean 的引用作为集合的元素。
示例(设值注入, 上述(a)
情况)
Bean - MyCollection.java
package noioo;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
public class MyCollection {
private List myList;
private Set mySet;
private Map myMap;
private Properties myProperties;
// 以下是一堆getter/setter...
public List getMyList() {
return myList;
}
public Map getMyMap() {
return myMap;
}
public Set getMySet() {
return mySet;
}
public Properties getMyProperties() {
return myProperties;
}
public void setMyList(List myList) {
this.myList = myList;
}
public void setMyMap(Map myMap) {
this.myMap = myMap;
}
public void setMySet(Set mySet) {
this.mySet = mySet;
}
public void setMyProperties(Properties myProperties) {
this.myProperties = myProperties;
}
}
配置文件 - spring-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="myCollection" class="noioo.MyCollection">
<property name="myList">
<list>
<value>List_A</value>
<value>List_B</value>
<value>List_C</value>
<value>List_D</value>
</list>
</property>
<property name="myMap">
<map>
<entry key="1" value="Map_A"/>
<entry key="2" value="Map_B"/>
<entry key="3" value="Map_C"/>
</map>
</property>
<property name="myProperties">
<props>
<prop key="1">Props_A</prop>
<prop key="2">Props_B</prop>
<prop key="3">Props_C</prop>
</props>
</property>
<property name="mySet">
<set>
<value>Set_A</value>
<value>Set_B</value>
<value>Set_C</value>
</set>
</property>
</bean>
</beans>
执行者 - Runner.java
package noioo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Runner {
public static void main(String[] args){
ApplicationContext context = new ClassPathXmlApplicationContext("spring-beans.xml");
MyCollection myCollection = (MyCollection)context.getBean("myCollection");
System.out.println(myCollection.getMyList());
System.out.println(myCollection.getMySet());
System.out.println(myCollection.getMyProperties());
System.out.println(myCollection.getMyMap());
}
}
运行结果
[List_A, List_B, List_C, List_D]
[Set_A, Set_B, Set_C]
{3=Props_C, 2=Props_B, 1=Props_A}
{1=Map_A, 2=Map_B, 3=Map_C}
Process finished with exit code 0