问题
默认情况下,Spring容器认为配置文件中设置的集合中的所有元素都是String类型。
解决方案:
可以使用<value>的type属性指定单个元素的数据类型类型,也可以再集合标签上使用value-type属性指定整个集合的数据类型。
例:
使用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>
注意:
1、如果在bean中使用了泛型,Spring容器会根据泛型定义自动将配置的集合转换为正确的类型。
bean:
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();
}
}
配置文件:
<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>