2011-08-20 11 views
23

Una semplice domanda su Spring injection da un file di proprietà per un attributo finale.Spring Property Injection in un attributo finale @Value - Java

Ho un file proprietà che voglio memorizzare un percorso di file in genere quando si utilizza file di proprietà attributi I classe di installazione utilizzando qualcosa di simile a questo:.

private @Value("#{someProps['prop.field']}") String someAttrib ; 

Poi nel mio spring.xml vorrei avere qualcosa di simile :

<util:properties id="someProps" 
    location="classpath:/META-INF/properties/somePropFile.properties" /> 

Questo funziona bene, è semplice e rende il codice bello e ordinato. Ma non sono sicuro di quale sia lo schema migliore da utilizzare quando si tenta di iniettare valori di proprietà negli attributi di classe finale?

Ovviamente qualcosa di simile:

private static final @Value("#{fileProps['dict.english']}") String DICT_PATH; 

non funzionerà. C'è un altro modo?

Cheers!

+2

No, i due approcci sono incompatibili. – skaffman

risposta

24

L'unico modo per iniettare valori in un campo finale è tramite Constructor Injection. Tutto il resto sarebbe un tremendo trucco per la parte di Primavera.

+1

C'è un esempio di questo? – wheeler

0

Se siete alla ricerca di un esempio:

public class Test { 


    private final String value; 
    public Test(@Value("${some.value}") String value){ 
     this.value=value; 
     System.out.println(authURL); 
    } 
    }