Подтвердить что ты не робот

Самый простой способ указать список со значениями в Spring?

Предположим, что у меня есть большой список значений aa bb cc dd ee ff gg и т.д., которые мне нужно передать как конструктор в spring

Если мне нужно настроить как строковый массив, это легко в spring, поскольку мы можем просто указать значения как разделенные запятыми как aa, bb, cc и т.д.,

Если мне нужно настроить как список, мне нужно сделать, как показано ниже

<bean name="myBean" class="MyClass">
    <constructor-arg>
        <list>
            <value>aa</value>
            <value>bb</value>
            <value>cc</value>
            <value>dd</value>
        </list>
    </constructor-arg>
</bean>

Когда число значений увеличилось, он занимает огромные линии и выглядит уродливо.

Может кто-нибудь, пожалуйста, помогите мне, как мы можем передавать большие значения в виде списка в качестве конструктора?

4b9b3361

Ответ 1

Значения передаются в список, поступающий из файла свойств? Если это так, вы можете использовать что-то вроде этого:

<bean name="myBean" class="MyClass">
   <constructor-arg>
      <bean class="org.springframework.util.StringUtils" factory-method="commaDelimitedListToSet">
          <constructor-arg type="java.lang.String" value="${list.value}"/>
      </bean>
    </constructor-arg>
</bean> 

со следующим файлом .properties

list.value=aa,bb,cc,dd   

И если нет, вы можете просто передать сразу:

<bean name="myBean" class="MyClass">
   <constructor-arg>
      <bean class="org.springframework.util.StringUtils" factory-method="commaDelimitedListToSet">
          <constructor-arg type="java.lang.String" value="aa,bb,cc,dd"/>
      </bean>
    </constructor-arg>
</bean> 

Ответ 2

Spring может автоматически преобразовывать любую строку, разделенную запятой, в список или массив:

public class Foo {
   public void setValueList(String[] values) { ... }
}

<bean class="Foo"
      p:valueList="a,b,c,d" />
<bean class="Foo"
      c:_0="a,b,c,d" />
<bean class="Foo">
     <constructor-arg><value>a,b,c,d</value></constructor-arg>
</bean>

На самом деле, даже если в строке есть только 1 значение, и никаких запятых нет, он все равно будет работать.

Нет необходимости в вызове org.springframework.util.StringUtils, который кто-то упомянул в другом ответе.

Эти слова для конструктора также args (c: _0 является сокращением для < конструктор-arg index = "0" & ​​gt; с использованием пространства имен c.

Ответ 3

Вы можете попробовать что-то еще более простое и использовать язык выражения Spring для преобразования значений в список:

<bean name="myBean" class="MyClass">
    <constructor-arg value="#{T(java.util.Arrays).asList('${list.values}')}"/>
</bean>

Ответ 4

Вы можете реализовать конструктор, который принимает в качестве аргумента строку с разделителями-запятыми (и сама разделяет эту строку в значениях).

Если вы хотите, чтобы решение, которое работает для любого конструктора/свойства, вы могли бы посмотреть на реализацию своего собственного PropertyEditor и configure Spring, чтобы использовать его.