你可以这样做:
<beans:bean id="someClass" class="com.you.SomeClass" >
<beans:property name="myIntArray">
<beans:list>
<beans:list>
<beans:value>1</beans:value>
<beans:value>2</beans:value>
<beans:value>3</beans:value>
</beans:list>
<beans:list>
<beans:value>4</beans:value>
<beans:value>5</beans:value>
<beans:value>6</beans:value>
</beans:list>
<beans:list>
<beans:value>7</beans:value>
<beans:value>8</beans:value>
<beans:value>9</beans:value>
</beans:list>
</beans:list>
</beans:property>
</beans:bean>
或者:
<beans:bean id="someClass" class="com.you.SomeClass" >
<beans:property name="myIntArray">
<beans:array>
<beans:array>
<beans:value>1</beans:value>
<beans:value>2</beans:value>
<beans:value>3</beans:value>
</beans:array>
<beans:array>
<beans:value>4</beans:value>
<beans:value>5</beans:value>
<beans:value>6</beans:value>
</beans:array>
<beans:array>
<beans:value>7</beans:value>
<beans:value>8</beans:value>
<beans:value>9</beans:value>
</beans:array>
</beans:array>
</beans:property>
</beans:bean>
更新:提供您自己的转换器
另一种方法是使用Converter。这是一个示例实现:
public class IntArrayConverter implements Converter<String, int[][]> {
@Override
public int[][] convert(String source) {
if(isBlank(source)) {
return new int[0][0];
}
String[] subArraysStrs = source.split(":");
int[][] result = new int[subArraysStrs.length][];
for(int i = 0; i < subArraysStrs.length; i++) {
String subArrayStr = trim(subArraysStrs[i]);
if(isBlank(subArrayStr)) {
throw new IllegalArgumentException();
}
String[] subArrayElementStrs = subArrayStr.split(",");
int[] subArray = new int[subArrayElementStrs.length];
for(int j = 0; j < subArray.length; j++) {
String elementStr = trim(subArrayElementStrs[j]);
subArray[j] = Integer.parseInt(elementStr);
}
result[i] = subArray;
}
return result;
}
}
现在,通过在配置中声明以下内容来告诉 spring 它可以使用这个转换器:
<bean id="conversionService"
class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.example.IntArrayConverter" />
</list>
</property>
</bean>
接着:
<bean class="com.you.SomeClass">
<property name="myIntArray" value="1,2,3:4,5,6:7,8,9"></property>
</bean>
为了简单起见,我的转换器被实现为在每个子数组周围不带花括号的情况下使用。也就是说,而不是
<property name="myIntArray" value="{1,2,3},{4,5,6},{7,8,9}"></property>
我要去
<property name="myIntArray" value="1,2,3:4,5,6:7,8,9"></property>
如果需要,您可以修改代码以解释任何类型的字符串格式。有关Converter的更多详细信息,您可以查看此处。
注意:注册ConversionService
将可用于您的整个应用程序。也就是说,只要需要将 aString
转换为int[][]
. 此外,即使您只提供一个转换器,所有默认转换器无论如何都会注册,因此您不会失去它们的好处。