2009-11-16 11 views

risposta

0

Sei riuscito a farlo funzionare iniettando esplicitamente il valore dal file di definizione bean utilizzando la sintassi della proprietà? In teoria, se funziona, dovresti essere in grado di usare la stessa espressione in @Value. Per questo, dovresti essere in grado di farlo utilizzando @Autowired @Qualifier anche

0

Non credo sia possibile accedere alle proprietà caricate da PropertyPlaceHolderConfigurer utilizzando SPEL in un'annotazione @Value. Sarebbe bello, ma per quanto ne so, la cosa migliore da fare è quella di dichiarare:

<util:properties id="props" location="classpath:xxx/yyy/app.props"/> 

Può indicare le stesse proprietà file come PropertyPlaceHolderConfigurer.

+1

Puoi crea anche il tuo oggetto PropertyPlaceHolde rConfigurer che espone le sue proprietà. Puoi trovare un esempio di questo qui: http://mortarproject.svn.sourceforge.net/viewvc/mortarproject/src/trunk/mortar-core/src/main/java/org/mortar/spring/beans/factory/config /EnhancedPropertyPlaceholderConfigurer.java?revision=70&view=markup Dovrai registrarlo usando il vecchio invece del più recente in modo da poter impostare un id e quindi riferirlo nel tuo valore tag come @Value (# {xxx.properties ['foo.bar']}) – pakman

+0

Non penso che sia necessario inserire il nome del file xxx.properties, molla carica tutti i file delle proprietà, devi solo assicurarti che la tua chiave è unica tra tutti i file delle proprietà. – Ashish

+0

Questo non è corretto. A partire dalla primavera 3 è possibile accedere ai valori di PropertyPlaceHolderConfigurer utilizzando SPEL. –

15

Vecchia domanda, ma vale ancora la pena di rispondere. È possibile utilizzare l'espressione nello stesso modo in cui si usa l'originale PropertyPlaceholderConfigurer.

app.properties

app.value=Injected 

app-context.xml

<bean id="propertyConfigurer" class="MyPropertyPlaceholderConfigurer"> 
     <property name="location"> 
     <value>file:app.properties</value> 
     </property> 
    </bean> 

nel chicco di destinazione

@Value(value="${app.value}") 
    private String injected; 

testato questo approccio usando Primavera 3.0.6

+0

Il numero extra {{}} è un po 'inutile (fa una valutazione SpEL di una stringa statica). A partire da Spring 3.x, la sintassi $ {app.value} è supportata nelle annotazioni @Value e può essere utilizzata per iniettare la proprietà (ma probabilmente non era al momento in cui è stata posta la domanda). – MikeN

+0

Hai ragione riguardo al numero # {...} extra. Puoi ometterlo e otterrai lo stesso risultato. Correggerò la mia risposta per sbarazzarmene. – micfra

Problemi correlati