admin
管理员
管理员
  • UID1
  • 粉丝1
  • 关注0
  • 发帖数378
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:981回复:0

Spring注入集合

楼主#
更多 发布于:2015-12-17 11:27
您已经看到了如何配置基本数据类型使用value属性和使用<property>标签的ref属性在你的bean配置文件中的对象引用。这两种情况下处理过单值到一个bean。
现在什么样,如果你想通过多元价值,如Java Collection类型List, Set, Map 及 Properties。要处理这种情况,Spring提供了四种类型的如下集合的配置元素:
[table=100%,#f7f7f7,#d6d6d6,1,rgb(214, 214, 214)][tr][td=1,1,101]元素[/td][td]描述[/td][/tr][tr][td]<list>[/td][td]这有助于注入值列表List配线,使重复。[/td][/tr][tr][td]<set>[/td][td]这有助于在配线的一组值,但不能重复。[/td][/tr][tr][td]<map>[/td][td]这可用于注入的名称 - 值对,其中名称和值可以是任何类型的集合。[/td][/tr][tr][td]<props>[/td][td]这可以用来注入的名称 - 值对,其中名称和值都是字符串的集合。[/td][/tr][/table]可以使用<list> 或<set> 来连接任何实现java.util.Collection或数组。
会遇到两种情况(a)将收集的直接的值及(b)传递一个bean的引用作为集合的元素之一。


例子:

我们使用Eclipse IDE,然后按照下面的步骤来创建一个Spring应用程序:
[table=100%,#f7f7f7,#d6d6d6,1,rgb(214, 214, 214)][tr][td=1,1,26]步骤[/td][td]描述[/td][/tr][tr][td]1[/td][td]Create a project with a name SpringExample and create a package com.yiibai under the src folder in the created project.[/td][/tr][tr][td]2[/td][td]Add required Spring libraries using Add External JARs option as explained in the Spring Hello World Example chapter.[/td][/tr][tr][td]3[/td][td]Create Java classes JavaCollection, and MainApp under the com.yiibai package.[/td][/tr][tr][td]4[/td][td]Create Beans configuration file Beans.xml under the src folder.[/td][/tr][tr][td]5[/td][td]The final step is to create the content of all the Java files and Bean Configuration file and run the application as explained below.[/td][/tr][/table]这里是JavaCollection.java文件的内容:
package com.yiibai;
import java.util.*;
 
public class JavaCollection {
   List addressList;
   Set  addressSet;
   Map  addressMap;
   Properties addressProp;
 
   // a setter method to set List
   public void setAddressList(List addressList) {
      this.addressList = addressList;
   }
   // prints and returns all the elements of the list.
   public List getAddressList() {
      System.out.println("List Elements :"  + addressList);
      return addressList;
   }
 
   // a setter method to set Set
   public void setAddressSet(Set addressSet) {
      this.addressSet = addressSet;
   }
 
   // prints and returns all the elements of the Set.
   public Set getAddressSet() {
      System.out.println("Set Elements :"  + addressSet);
      return addressSet;
   }
 
   // a setter method to set Map
   public void setAddressMap(Map addressMap) {
      this.addressMap = addressMap;
   }
   // prints and returns all the elements of the Map.
   public Map getAddressMap() {
      System.out.println("Map Elements :"  + addressMap);
      return addressMap;
   }
 
   // a setter method to set Property
   public void setAddressProp(Properties addressProp) {
      this.addressProp = addressProp;
   }
   // prints and returns all the elements of the Property.
   public Properties getAddressProp() {
      System.out.println("Property Elements :"  + addressProp);
      return addressProp;
   }
}

以下是MainApp.java文件的内容:
package com.yiibai;
 
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文件里面有配置的集合的所有类型:
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
 
&lt;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-3.0.xsd"&gt;
 
   &lt;!-- Definition for javaCollection --&gt;
   &lt;bean id="javaCollection" class="com.yiibai.JavaCollection"&gt;
 
      &lt;!-- results in a setAddressList(java.util.List) call --&gt;
      &lt;property name="addressList"&gt;
        &lt;list&gt;
           &lt;value&gt;INDIA&lt;/value&gt;
           &lt;value&gt;Pakistan&lt;/value&gt;
           &lt;value&gt;USA&lt;/value&gt;
           &lt;value&gt;USA&lt;/value&gt;
        &lt;/list&gt;
      &lt;/property&gt;
 
     &lt;!-- results in a setAddressSet(java.util.Set) call --&gt;
     &lt;property name="addressSet"&gt;
        &lt;set&gt;
           &lt;value&gt;INDIA&lt;/value&gt;
           &lt;value&gt;Pakistan&lt;/value&gt;
           &lt;value&gt;USA&lt;/value&gt;
           &lt;value&gt;USA&lt;/value&gt;
        &lt;/set&gt;
      &lt;/property&gt;
 
     &lt;!-- results in a setAddressMap(java.util.Map) call --&gt;
     &lt;property name="addressMap"&gt;
        &lt;map&gt;
           &lt;entry key="1" value="INDIA"/&gt;
           &lt;entry key="2" value="Pakistan"/&gt;
           &lt;entry key="3" value="USA"/&gt;
           &lt;entry key="4" value="USA"/&gt;
        &lt;/map&gt;
      &lt;/property&gt;
 
     &lt;!-- results in a setAddressProp(java.util.Properties) call --&gt;
     &lt;property name="addressProp"&gt;
        &lt;props&gt;
           &lt;prop key="one"&gt;INDIA&lt;/prop&gt;
           &lt;prop key="two"&gt;Pakistan&lt;/prop&gt;
           &lt;prop key="three"&gt;USA&lt;/prop&gt;
           &lt;prop key="four"&gt;USA&lt;/prop&gt;
        &lt;/props&gt;
      &lt;/property&gt;
 
   &lt;/bean&gt;
 
&lt;/beans&gt;

创建源代码和bean配置文件完成后,让我们运行应用程序。如果应用程序一切顺利,这将打印以下信息:
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}



注入Bean引用:

下面bean定义将帮助您了解如何注入bean的引用作为集合的元素之一。甚至可以混合引用和值都在一起,如下图所示:
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
 
&lt;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-3.0.xsd"&gt;
 
   &lt;!-- Bean Definition to handle references and values --&gt;
   &lt;bean id="..." class="..."&gt;
 
      &lt;!-- Passing bean reference  for java.util.List --&gt;
      &lt;property name="addressList"&gt;
        &lt;list&gt;
           &lt;ref bean="address1"/&gt;
           &lt;ref bean="address2"/&gt;
           &lt;value&gt;Pakistan&lt;/value&gt;
        &lt;/list&gt;
      &lt;/property&gt;
 
     &lt;!-- Passing bean reference  for java.util.Set --&gt;
     &lt;property name="addressSet"&gt;
        &lt;set&gt;
           &lt;ref bean="address1"/&gt;
           &lt;ref bean="address2"/&gt;
           &lt;value&gt;Pakistan&lt;/value&gt;
        &lt;/set&gt;
      &lt;/property&gt;
 
     &lt;!-- Passing bean reference  for java.util.Map --&gt;
     &lt;property name="addressMap"&gt;
        &lt;map&gt;
           &lt;entry key="one" value="INDIA"/&gt;
           &lt;entry key ="two" value-ref="address1"/&gt;
           &lt;entry key ="three" value-ref="address2"/&gt;
        &lt;/map&gt;
      &lt;/property&gt;
 
   &lt;/bean&gt;
 
&lt;/beans&gt;

使用上面的bean定义,需要定义这样一种方式,他们应该能够处理的参考,以及setter方法。


注入null和空字符串的值

如果需要传递一个空字符串作为值,如下所示:
&lt;bean id="..." class="exampleBean"&gt;
   &lt;property name="email" value=""/&gt;
&lt;/bean&gt;

前面的例子等同于Java代码: exampleBean.setEmail("")
如果需要传递一个null值,如下所示:
&lt;bean id="..." class="exampleBean"&gt;
   &lt;property name="email"&gt;&lt;null/&gt;&lt;/property&gt;
&lt;/bean&gt;


前面的例子等同于Java代码:exampleBean.setEmail(null)

 

 

 

 

 

 

 

异常中心网是一家专门收集整理程序员编程过程中遇到的常见异常(exception)以及各种异常问答中心的网站。异常中心网旨在,减少程序员在编码遇到异常,处理各种异常时间和痛苦,让程序员能更愉快的、快速的定位异常并查找对应的异常解决方案。异常中心网诚心打造最完美的编程社区为程序员用户服务,努力成为最好的程序员乐园程序员社区程序异常中心程序bug中心异常问答中心

 

喜欢0 评分0
游客

返回顶部