2009-05-20 14 views
8

Necesito almacenar algunos parámetros de configuración para una aplicación web que utiliza el marco de primavera.Almacenar propiedades personalizadas en aplicationContext.xml Archivo de resorte

Normalmente utilizaré un archivo de archivo de configuración pero me pregunto si puedo almacenar esos valores en el archivo applicationContext.xml.

Una solución podría ser la creación de una clase JavaBean para almacenar los valores y construir esa clase de conformidad con la primavera, algo como esto:

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

pero me gustaría saber si hay una manera de almacenar los parámetros sin la necesidad de crear esa clase.

Gracias de antemano.


creo que la mejor solución que se adapte a mis necesidades es utilizar una instancia java.util.Properties como un grano de primavera.

Gracias a todos.

Respuesta

15

Esto debería funcionar con la siguiente sintaxis.

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

Está aprovechando el hecho de que java.util.Properties tiene un constructor de copia que toma un objeto Properties.

Lo hago para un HashSet que también tiene un constructor de copia (como HashMaps y ArrayLists) y funciona perfectamente.

+1

ApplicationContext app = new ClassPathXmlApplicationContext ("app.xml"); System.out.println (app.getBean ("props")); el resultado es {}. ¿Algúna idea de cómo arreglar esto? – DeepNightTwo

1

Spring tiene soporte integrado para especificar propiedades dentro del contexto XML de la aplicación. Consulte section 3.3.2.4 de los documentos de referencia de Spring.

+0

Gracias por la respuesta. Pero quiero evitar crear un objeto POJO para almacenar las propiedades. Leí el enlace que proporcionó, puedo especificar propiedades pero siempre dentro de un elemento de definición , de modo que se vincula el bean con una clase POJO. – HyLian

+0

¿Desea que la actual sea una instancia de java.util.Properties? – Mark

+0

Eso es lo que estaba buscando. Gracias :) – HyLian

1

Creo que obtendrá los mejores resultados usando SpringPlantholderConfigurer PropertyPlaceholderConfigurer, que le permite asignar valores desde un archivo .properties regular contra las propiedades definidas en sus beans.

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

El ejemplo muestra cómo configurar las propiedades de conexión JDBC directamente en una instancia de javax.sql.DataSource, eliminando la necesidad de un intermedio "grano de configuración".

+0

Gracias por responder. Su solución no parece mala, pero me gustaría no crear una separada.archivo de propiedades, pero para almacenar los valores de las propiedades solo en el archivo appContext.xml y acceder a ellos en código Java. – HyLian

+0

Luego desea consultar el enlace Marcar proporcionado. Muestra cómo se puede declarar una instancia de java.util.Properties en XML: < "administrador" prop = clave> [email protected] [email protected]g [email protected]

+0

@HyLian no se puede simplemente poner propiedades arbitrarias (que se parecen a un archivo .properties) en una Archivo XML. Debe seguir la estructura XML (como @ brd6644 mencionada anteriormente) o ponerla en un archivo .properties por separado, como mencionó en su publicación. –

0

La mejor manera es utilizar 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> 

continuación

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

y en yourconfigurationfile.properties

myvalue1= value1 
Cuestiones relacionadas