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

Чтение динамического списка свойств в spring bean

Я искал, но не могу найти эти шаги. Надеюсь, что я пропущу что-то очевидное.

У меня есть файл свойств со следующим содержимым:

machines=A,B

У меня есть другой файл, похожий на этот, но имеющий другое количество элементов в элементе машин, например:

machines=B,C,D

Мой вопрос заключается в том, как загружать эту переменную машин переменной длины в bean в моей конфигурации spring общим способом?

что-то вроде этого:

<property name="machines" value="${machines}"/>

где машины - это массив или список в моем java-коде. Я могу определить его, но хочу, могу ли я понять, как это сделать.

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

4b9b3361

Ответ 1

Вы можете взглянуть на класс Spring StringUtils. Он имеет ряд полезных методов для преобразования списка, разделенного запятыми, в массив Set или String. Вы можете использовать любой из этих методов утилиты, используя Spring factory -method framework, чтобы ввести анализируемое значение в ваш bean. Вот пример:

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

В этом примере значение для "машин" загружается из файла свойств.

Если существующий метод утилиты не отвечает вашим потребностям, довольно просто создать свой собственный. Этот метод позволяет выполнять любой статический метод.

Ответ 2

Spring EL упрощается. Java:

List <String> machines;

Context:

<property name="machines" value="#{T(java.util.Arrays).asList('${machines}')}"/>

Ответ 3

Если вы сделаете свойство "машины" массивом String, то spring сделает это автоматически для вас

machines=B,C,D

<property name="machines" value="${machines}"/>

public void setMachines(String[] test) {

Ответ 4

Так как Spring 3.0, также можно прочитать в списке значений, используя аннотацию @Value.

Файл свойства:

machines=B,C,D

Код Java:

import org.springframework.beans.factory.annotation.Value;

@Value("#{'${machines}'.split(',')}")
private List<String> machines;