Spring在Bean中注入集合

本文内容纲要:Spring在Bean中注入集合

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

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

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

您可以使用来连接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();

}

}

运行结果:

Image

注入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中注入集合

原文链接:https://www.cnblogs.com/EasonJim/p/6883824.html

以上是 Spring在Bean中注入集合 的全部内容, 来源链接: utcz.com/z/296000.html

回到顶部