如何以与Spring bean定义相同的顺序获取集合元素

时间:2019-02-14 22:55:57

标签: spring collections

我有很多与此相似的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;

看来,错误的重复值会被忽略,而会导致一个很好的错误。我希望我可以依靠它,因为它确实使生活更轻松!

  1. Spring将使用哪些集合实现?

  2. 迭代columnNames以获取与bean中指定的相同顺序的columnName的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

  1. 您可以通过<set set-class="com.my.SetImpl" />see current doc)设置实现类。 (com.my.SetImpl 必须实施 java.util.Set

    • 或者:在您的targetClass上定义SetFactoryBean ...
    • 如果省略current spring,将使用java.util.LinkedHashSet
  2. 更正确,可靠和未来安全的做法是将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">