2014-12-09 3 views
6

Как мне добавить список строковых значений, используя аннотацию @Value. Я использую Spring 4.1.2.Весна: как вставить строковый список строк с использованием аннотации @Value

Я пробовал:

@Value(value = "top, person, organizationalPerson, user") 
private List<String> userObjectClasses 

, а затем на основе spring el documentation for inline lists: только

@Value(value = "{top, person, organizationalPerson, user}") 
private List<String> userObjectClasses 

Эти попытки придать строковый литерал значения заданного в качестве единственного элемента в списке.

EDIT

В этом случае, я хотел бы иметь возможность просто жестко закодировать значения, а не читать из файла свойств. Такой подход кажется немного менее вонючим, чем:

private List<String> userObjectClasses = Arrays.asList(new String[] {"top", "person", "organizationalPerson", "user"}); 

В прошлом, я использовал конфигурацию XML Спринга телеграфировать бобы, и в этом случае я мог бы сделать (если предположить, что боб был публичным сеттер для userObjectClasses имущество):

<property value="userObjectClass"> 
    <list> 
    <value>top</value> 
    <value>person</value> 
    <value>organizationalPerson</value> 
    <value>user</value> 
    </list> 
</property> 

Есть ли аналог этому при использовании конфигурации на основе аннотаций?

+0

Ответ еще не помог? Если бы это помогло - тогда вы могли бы поставить вопрос как ответ. Комментарий BTW ниже также помогает. –

ответ

25

list.of.strings=first,second,third взято из файла свойств, например.

Затем с помощью SpEL:

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

EDIT

Тогда я не думаю, что вам нужно использовать аннотацию для такого типа задач. Вы могли бы все работать так же, как и вы, или в @PostConstruct, чтобы инициализировать некоторые поля.

+14

Служба преобразования пружин выполнит разделение для вас, если ваша ссылка представляет собой 'array' или' Collection', поэтому вам не нужно это уродливое выражение: просто '@Value (« $ {list.of.strings} ») ' –

+0

@CostiCiudatu, как он узнает, с каким разделителем делиться? это работает только для ','? –

+2

@ErinDrummond Он использует [StringUtils.commaDelimitedListToStringArray] (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/util/StringUtils.html#commaDelimitedListToStringArray-java.lang.String-) внутри; так что да, он полагается на формат, разделенный запятыми. –

Смежные вопросы