2014-12-09 14 views
6

Come faccio a iniettare un elenco di valori stringa usando l'annotazione @Value. Sto usando Spring 4.1.2.Sorgente: come iniettare un elenco in linea di stringhe usando l'annotazione @Value

ho provato:

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

e poi in base alla spring el documentation for inline lists: solo

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

Questi tentativi di iniettare una stringa letterale del valore dato come l'unico elemento nella lista.

EDIT

In questo caso, mi piacerebbe essere in grado di semplicemente codificare i valori piuttosto che leggere da un file di proprietà. Questo approccio sembra un po 'meno puzzolente di:

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

In passato, ho usato configurazione XML di primavera per cablare i fagioli, e in quel caso avrei potuto fare (assumendo che il fagiolo ha avuto un setter pubblico per la userObjectClasses proprietà):

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

C'è un analogo a questo quando si utilizza la configurazione basata su annotazioni?

+0

La risposta non ha ancora aiutato? Se ti è stato utile, puoi contrassegnare la domanda come risposta. Il commento di BTW di seguito aiuta anche. –

risposta

25

list.of.strings=first,second,third preso da file di proprietà per es.

Quindi, utilizzando SpEL:

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

EDIT

Poi non credo che avete bisogno di utilizzare annotazioni per tale tipo di attività. Potresti fare tutto il lavoro proprio come hai fatto una puntata o nello @PostConstruct per inizializzare alcuni campi.

+14

Il servizio di conversione di primavera eseguirà la suddivisione per te se il tuo riferimento è un 'array' o' Collection', quindi non hai bisogno di quell'espressione brutta: solo '@Value (" $ {list.of.strings} ") ' –

+0

@CostiCiudatu come fa a sapere quale delimitatore dividere? funziona solo per un ','? –

+2

@ErinDrummond Utilizza [StringUtils.commaDelimitedListToStringArray] (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/util/StringUtils.html#commaDelimitedListToStringArray-java.lang.String-) internamente; quindi sì, si basa sul formato separato da virgole. –

Problemi correlati