2009-05-20 13 views
8

È necessario memorizzare alcuni parametri di configurazione per un'applicazione Web che utilizza il framework spring.Memorizza proprietà personalizzate in aplicationContext.xml Spring file

In genere userò un file configurationfile.properties ma mi chiedo se posso memorizzare quei valori nel file applicationContext.xml.

Una soluzione potrebbe essere quella di creare una classe JavaBean per memorizzare i valori, e costruire quella classe con la primavera, qualcosa di simile:

<bean id="configurationBean" class="mypackage.someClass"> 
<property name="confValue1"> 
    <value>myValue1</value> 
</property> 
.... 
</bean> 

ma vorrei sapere se c'è un modo per conservare quelli parametri senza la necessità di creare quella classe.

Grazie in anticipo.


Penso che la soluzione migliore che si adatta alle mie esigenze è quello di utilizzare un'istanza java.util.Properties come Bean primavera.

Grazie a tutti.

risposta

15

Questo dovrebbe funzionare con la seguente sintassi.

<bean id="props" class="java.util.Properties" > 
    <constructor-arg> 
     <props> 
      <prop key="myKey">myValue</prop> 
      <prop ...> 
     </props> 
    </constructor-arg> 
</bean> 

Si sta sfruttando il fatto che java.util.Properties ha un costruttore di copia che accetta un oggetto Proprietà.

Faccio questo per un HashSet che ha anche un costruttore di copie (come HashMaps e ArrayLists) e funziona perfettamente.

+1

App ApplicationContext = new ClassPathXmlApplicationContext ("app.xml"); System.out.println (app.getBean ("props")); il risultato è {}. Qualche idea su come risolvere questo problema? – DeepNightTwo

1

Spring dispone del supporto integrato per la specifica delle proprietà all'interno del contesto XML dell'applicazione. Vedi section 3.3.2.4 dei documenti di riferimento di primavera.

+0

La ringrazio per la risposta. Ma voglio evitare di creare un oggetto POJO per memorizzare le proprietà. Ho letto il collegamento che hai fornito, posso specificare le proprietà ma sempre all'interno di un elemento di definizione , in modo che colleghi il bean con una classe POJO. – HyLian

+0

Quindi vuoi che l'attuale sia un'istanza di java.util.Properties? – Mark

+0

Questo è quello che stavo cercando. Grazie :) – HyLian

1

Penso che otterrete i migliori risultati utilizzando Spring's PropertyPlaceholderConfigurer che consente di mappare valori da un file .properties regolare rispetto alle proprietà definite sui bean.

http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-factory-placeholderconfigurer

L'esempio mostra come impostare le proprietà di connessione JDBC direttamente su un'istanza di javax.sql.DataSource, eliminando la necessità di un intermedio "fagiolo configurazione".

+0

Grazie per aver risposto. La tua soluzione non sembra male, ma mi piacerebbe non creare un separato.file delle proprietà ma per memorizzare i valori delle proprietà solo nel file appContext.xml e accedervi in ​​codice Java. – HyLian

+0

Quindi si desidera fare riferimento al collegamento fornito. Essa mostra come si può dichiarare un'istanza di java.util.Properties in XML: [email protected] [email protected] [email protected]

+0

@HyLian non si può semplicemente mettere le proprietà arbitrarie (che sembra un file .properties) in un File XML O devi seguire la struttura XML (come @ brd6644 menzionata sopra) o metterla in un file .properties separato, come menzionato nel suo post. –

0

Il modo migliore è quello di utilizzare la primavera PropertyPlaceholderConfigurer

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
      <value>classpath:yourconfigurationfile.properties</value> 
     </list> 
    </property> 
</bean> 

poi

<bean id="configurationBean" class="mypackage.someClass"> 
    <property name="confValue1"> 
     <value>${myvalue1}</value> 
    </property> 
    .... 
</bean> 

e in yourconfigurationfile.properties

myvalue1= value1 
Problemi correlati