2013-01-04 19 views
7

È possibile caricare segnaposto nidificati all'interno di un file delle proprietà? Sto cercando di caricare un URL in modo dinamico.Caricamento di segnaposto nidificati dal file delle proprietà con Spring

Per esempio, se il mio file delle proprietà contiene

my.url=http://localhost:8888/service/{nestedProperty}/ 

C'è un modo per caricare i valori per {} nestedProperty in fase di esecuzione? Simile al comportamento di un ResourceBundle. In tal caso, come potrei essere in grado di istanziare efficacemente la stringa? Finora sto pensando

<bean id="myURLString" class="java.lang.String" scope="prototype" lazy-init="true"> 
    <property name="URL" value="${my.url}" /> 
</bean> 

... ma non sono sicuro di quali proprietà nidificare. Mi piacerebbe ottenere un fagiolo con annotazioni, se possibile, anche se Al momento ho qualcosa sulla falsariga di

ctx.getBean("myURLString", String.class, new Object[] { nestedProperty}); 

ho guardato in PropertyPlaceholderConfigurer e diverse altre proprietà del file domande qui, ma io non riesco per capire se questo è anche possibile.

Vorrei anche notare che voglio caricare dinamicamente questa proprietà nidificato da dentro il mio codice, o almeno manipolare da lì

risposta

9

sì è possibile (possibilmente tramite @PostConstruct?):

my.url=http://localhost:8888/service/${nestedProperty} 
nestedProperty=foo/bar/baz 

Aggiungi il simbolo del dollaro davanti alle parentesi nel tuo esempio e sei pronto!

Per utilizzare effettivamente la proprietà completamente risolto, fare questo:

@Value("${my.url}") 
private String url; 

in un bean di primavera.

+0

Non avrei bisogno di definire esplicitamente questa proprietà nella mia definizione di bean in qualche modo? – lase

+0

'nestedProperty' fa riferimento alla proprietà di quel nome, la seconda riga dell'esempio, non un bean. Spring carica tutte le proprietà in tutti i file configurati e li risolve uno contro l'altro. Finché si evitano i riferimenti circolari, si sta bene. –

+0

Ciò consente di specificare dinamicamente le proprietà nidificate dalla chiamata ctx.getBean() anziché utilizzare il valore del file delle proprietà di "nestedProperty"? – lase

Problemi correlati