《Spring攻略(第2版)》——1.6 为集合元素指定数据类型

简介: 你可以用标记的type属性指定每个集合元素的数据类型,也可以用集合标记的value-type属性指定所有元素的数据类型。如果你使用Java 1.5或者更高版本,可以定义类型安全的集合,这样Spring将读取集合的类型信息。

本节书摘来自异步社区《Spring攻略(第2版)》一书中的第1章,第1.6节,作者: 【美】Gary Mak , Josh Long , Daniel Rubio著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.6 为集合元素指定数据类型

1.6.1 问题
默认情况下,Spring将集合中所有元素作为字符串对待。如果你不打算将集合元素作为字符串使用,就必须为它们指定数据类型。

1.6.2 解决方案
你可以用标记的type属性指定每个集合元素的数据类型,也可以用集合标记的value-type属性指定所有元素的数据类型。如果你使用Java 1.5或者更高版本,可以定义类型安全的集合,这样Spring将读取集合的类型信息。

1.6.3 工作原理
现在假定你打算接受一系列整数作为序列生成器的前缀。每个数字将由一个java.text. DecimalFormat实例格式化为4位数字。

package com.apress.springrecipes.sequence;
...
public class SequenceGenerator {
   ...
   private List<Object> suffixes;
   public void setSuffixes(List<Object> suffixes) {
     this.suffixes = suffixes;
   }

   public synchronized String getSequence() {
     StringBuffer buffer = new StringBuffer();
     ...
     DecimalFormat formatter = new DecimalFormat("0000");
     for (Object suffix : suffixes) {
        buffer.append("-");
        buffer.append(formatter.format((Integer) suffix));
     }
     return buffer.toString();
   }
}

然后和往常一样,在Bean配置文件中为你的序列生成器定义多个后缀。

<bean id="sequenceGenerator"
   class="com.apress.springrecipes.sequence.SequenceGenerator">
   <property name="prefixGenerator" ref="datePrefixGenerator" />
   <property name="initial" value="100000" />
   <property name="suffixes">
     <list>
        <value>5</value>
        <value>10</value>
        <value>20</value>
     </list>
   </property>
</bean>

但是,当你运行这个应用程序时,将会遇到一个ClassCastException异常,指出后缀不能转换为整数,因为其类型是String。Spring默认将集合中的每个元素作为字符串对待。你必须设置标记的type属性指定元素类型。

<bean id="sequenceGenerator"
   class="com.apress.springrecipes.sequence.SequenceGenerator">
   ...
   <property name="suffixes">
     <list>
        <value type="int">5</value>
        <value type="int">10</value>
        <value type="int">20</value>
     </list>
   </property>
</bean>

你也可以设置集合标记的value-type属性指定集合所有元素的类型。

<bean id="sequenceGenerator"
   class="com.apress.springrecipes.sequence.SequenceGenerator">
   ...
   <property name="suffixes">
     <list value-type="int">
        <value>5</value>
        <value>10</value>
        <value>20</value>
     </list>
   </property>
</bean>

在Java 1.5或者更高版本中,你可以用存储整数的类型安全集合定义suffixes列表。

package com.apress.springrecipes.sequence;
...
public class SequenceGenerator {
   ...
   private List<Integer> suffixes;

   public void setSuffixes(List<Integer> suffixes) {
     this.suffixes = suffixes;
   }

   public synchronized String getSequence() {
     StringBuffer buffer = new StringBuffer();
     ...
     DecimalFormat formatter = new DecimalFormat("0000");
     for (int suffix : suffixes) {
        buffer.append("-");
        buffer.append(formatter.format(suffix));
     }
     return buffer.toString();
   }
}

一旦以类型安全的方式定义了集合,Spring就能够通过反射读取集合的类型信息。这样,你就不再需要指定的value-type属性。

<bean id="sequenceGenerator"
   class="com.apress.springrecipes.sequence.SequenceGenerator">
   ...
   <property name="suffixes">
     <list>
        <value>5</value>
        <value>10</value>
        <value>20</value>
     </list>
   </property>
</bean>
相关文章
|
1月前
|
前端开发 Java Spring
【Spring】“请求“ 之后端传参重命名,传递数组、集合,@PathVariable,@RequestPart
【Spring】“请求“ 之后端传参重命名,传递数组、集合,@PathVariable,@RequestPart
26 2
|
6月前
|
算法 Java 数据库连接
Spring+MySQL+数据结构+集合,Alibaba珍藏版mybatis手写文档
Spring+MySQL+数据结构+集合,Alibaba珍藏版mybatis手写文档
|
3月前
|
XML Java 数据格式
Spring5入门到实战------4、IOC容器-Bean管理XML方式、集合的注入(二)
这篇文章是Spring5框架的实战教程,主题是IOC容器中Bean的集合属性注入,通过XML配置方式。文章详细讲解了如何在Spring中注入数组、List、Map和Set类型的集合属性,并提供了相应的XML配置示例和Java类定义。此外,还介绍了如何在集合中注入对象类型值,以及如何使用Spring的util命名空间来实现集合的复用。最后,通过测试代码和结果展示了注入效果。
Spring5入门到实战------4、IOC容器-Bean管理XML方式、集合的注入(二)
|
3月前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
118 3
|
3月前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
169 2
|
3月前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
36 0
|
XML Java 数据格式
spring中List,Set,Map集合的输出(详解)
spring中List,Set,Map集合的输出(详解)
121 0
|
6月前
|
IDE Java 开发工具
灵活配置 Spring 集合:List、Set、Map、Properties 详解
使用<property>标签的value属性配置原始数据类型和ref属性配置对象引用的方式来定义Bean配置文件。这两种情况都涉及将单一值传递给Bean
121 1
|
6月前
|
XML Java 数据格式
Spring5源码(6)-Spring注入集合属性
Spring5源码(6)-Spring注入集合属性
29 0
|
6月前
|
XML Java 数据格式
spring怎么去引用/注入集合/数组类型和 怎么通过 util 名称空间创建 list以及 怎么去通过级联属性赋值
spring怎么去引用/注入集合/数组类型和 怎么通过 util 名称空间创建 list以及 怎么去通过级联属性赋值
69 0
下一篇
无影云桌面