注入集合
你已经看到了如何使用value属性来配置基本数据类型和在你的bean配置文件中使用标签ref属性来配置对象引用.
如果你项传递多个值,如Java Collection 类型 List , Set , Map , Properties 应该怎么做呢. 为了处理这种情况 , Spring 提供了四种类型的集合的配置元素,如下所示:
元素 | 描述 |
---|---|
它有助于练习,如注入一系列值,允许重复. | |
它有助于连线一组值,但不能重复. | |
它可以用来注入名称 - 键值对的集合,其中名称和值可以是任何类型. | |
它可以用来注入名称 - 键值对结合,其中名称和值都是字符串类型 |
你可以使用或来连接任何java.util.Collection的实现或数组
你会遇到两种情况(a)传递集合中直接(b)传递一个bean的引用作为集合的元素.
例子
步骤 | 描述 |
---|---|
1 | 创建一个名称为 SpringExample 的项目,并且在创建项目的 c src 文件夹中创建一个包 com.tutorialspoint |
2 | 使用 Add External JARs 选项,添加所需的 Spring 库,解释见 Spring Hello World Example 章节。 option as explained in the chapter. |
3 | 在 com.tutorialspoint 包中创建Java类 TextEditor 、 SpellChecker 和 MainApp. |
4 | 在src 文件夹中创建 Beans 配置文件 Beans.xml 。 |
5 | 最后一步是创建的所有Java文件和Bean配置文件的内容,并运行应用程序,解释如下所示。 |
JavaCollection.java
package com.tutorialspoint;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
public class JavaCollection {
List addressList;
Set addressSet;
Map addressMap;
Properties addressProp;
public List getAddressList() {
System.out.println("List Elements :" + addressList);
return addressList;
}
public void setAddressList(List addressList) {
this.addressList = addressList;
}
public Set getAddressSet() {
System.out.println("Set Elements :" + addressSet);
return addressSet;
}
public void setAddressSet(Set addressSet) {
this.addressSet = addressSet;
}
public Map getAddressMap() {
System.out.println("Map Elements :" + addressMap);
return addressMap;
}
public void setAddressMap(Map addressMap) {
this.addressMap = addressMap;
}
public Properties getAddressProp() {
System.out.println("Property Elements :" + addressProp);
return addressProp;
}
public void setAddressProp(Properties addressProp) {
this.addressProp = addressProp;
}
}
MainApp.java
package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
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();
}
}
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" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config />
<bean id="javaCollection" class="com.tutorialspoint.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>
<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>
</beans>
测试跑通之后的结果:
List Elements :[india, pakistan, usa, usa]
Set Elements :[india, pakistan, usa]
Map Elements :{1=INDIA, 2=Pakistan, 3=USA, 4=USA}
Property Elements :{two=Pakistan, one=INDIA, three=USA, four=USA}
个人小结:其实和上面的差不多,都是创建对象,然后注入,再取出的操作.