Чтение динамического списка свойств в spring bean
Я искал, но не могу найти эти шаги. Надеюсь, что я пропущу что-то очевидное.
У меня есть файл свойств со следующим содержимым:
machines=A,B
У меня есть другой файл, похожий на этот, но имеющий другое количество элементов в элементе машин, например:
machines=B,C,D
Мой вопрос заключается в том, как загружать эту переменную машин переменной длины в bean в моей конфигурации spring общим способом?
что-то вроде этого:
<property name="machines" value="${machines}"/>
где машины - это массив или список в моем java-коде. Я могу определить его, но хочу, могу ли я понять, как это сделать.
В принципе, я бы предпочел, чтобы spring выполнял синтаксический анализ и привязывал каждое значение к элементу списка вместо того, чтобы мне приходилось писать что-то, что читается в полной строке машины, и самостоятельно разбирать (с разделителем запятой) каждое значение в массив или список. Есть ли простой способ сделать это, что мне не хватает?
Ответы
Ответ 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;