我有很多与此相似的bean定义
<bean id="TransformationMapOrganization " class="com.artifact_software.adt.plugin.transformation.RemoveColumnsTransformationImpl">
<property name="pluginId" value="Remove Division, Department, and Cost Code" />
<property name="dataStoreName" value="person_data"/>
<property name="columnNames">
<set>
<value>Division</value>
<value>Dept Code</value>
<value>Cost Code</value>
</set>
</property>
</bean>
在代码中,columnNames定义为:
protected List<String> columnNames;
看来,错误的重复值会被忽略,而会导致一个很好的错误。我希望我可以依靠它,因为它确实使生活更轻松!
Spring将使用哪些集合实现?
迭代columnNames以获取与bean中指定的相同顺序的columnName的正确方法是什么?
答案 0 :(得分:1)
您可以通过<set set-class="com.my.SetImpl" />
(see current doc)设置实现类。 (com.my.SetImpl
必须实施 java.util.Set
)
targetClass
上定义SetFactoryBean
... java.util.LinkedHashSet
。更正确,可靠和未来安全的做法是将columnNames
映射为java.util.Set
不映射为List
(+使用{ {1}}。
如果未提供set-class属性,则容器选择一个Set实现。
(以您的情况为准)显然,spring可以“顺利地”从set转换为list(“手工”也很容易完成api设计)。 Spring(似乎)还会保留您与众不同的条目,set-class
的实现另外保证/应该“保留顺序” ...
答案 1 :(得分:0)
您的Bean定义和字段名称不同。更改
<property name="ColumnNames">
到
<property name="columnNames">