¿Puedo componer un archivo de configuración de Spring a partir de otros más pequeños?

StackOverflow https://stackoverflow.com/questions/94542

  •  01-07-2019
  •  | 
  •  

Pregunta

Tengo varios proyectos y todos utilizan un proyecto para el modelo de datos.Cada uno de estos proyectos tiene su propio archivo applicationContext.xml con un montón de datos repetitivos dentro de él.

Me gustaría tener un archivo modelContext.xml y otro para mi ui.xml, etc.

¿Puedo hacer esto?

¿Fue útil?

Solución

Desde el Spring Docs (v 2.5.5 Sección 3.2.2.1.):

A menudo puede ser útil dividir las definiciones de contenedores en múltiples archivos XML.Una forma de luego cargar un contexto de aplicación que está configurado de todos estos fragmentos XML es usar el constructor de contexto de aplicación que toma múltiples ubicaciones de recursos.Con una fábrica de frijoles, un lector de definición de frijoles se puede usar varias veces para leer las definiciones de cada archivo a su vez.

En general, el equipo de primavera prefiere el enfoque anterior, ya que mantiene los archivos de configuración del contenedor sin darse cuenta del hecho de que se están combinando con otros.Un enfoque alternativo es usar uno o más ocurrencias del elemento para cargar definiciones de frijoles desde otro archivo (o archivos).Veamos una muestra:

<import resource="services.xml"/>
<import resource="resources/messageSource.xml"/>
<import resource="/resources/themeSource.xml"/>

<bean id="bean1" class="..."/>
<bean id="bean2" class="..."/>

En este ejemplo, las definiciones externas de frijoles se están cargando desde 3 archivos, servicios.xml, messsessource.xml y themesource.xml.Todas las rutas de ubicación se consideran en relación con el archivo de definición que realiza la importación, por lo que Services.xml en este caso debe estar en el mismo directorio o ubicación de clase Ubicación debajo de la ubicación del archivo de importación.Como puede ver, se ignora un corte principal, pero dado que se consideran caminos relativos, probablemente sea mejor forma no usar la barra de corte.El contenido de los archivos que se importan deben ser archivos de definición de frijol XML válidos de acuerdo con el esquema de Spring o DTD, incluido el elemento de nivel superior.

Otros consejos

Hacemos esto en nuestros proyectos en el trabajo, usando el cargador de recursos classpath* en Spring.Para una determinada aplicación, se cargarán todos los archivos appcontext que contengan la identificación de la aplicación:

classpath*:springconfig/spring-appname-*.xml

Sí, puedes hacer esto a través del elemento de importación.

<import resource="services.xml"/>

El atributo de recurso de cada elemento es una ruta válida (p. ej.ruta de clase:foo.xml)

Dado lo que Nicholas me señaló, encontré esto en los documentos.Me permite elegir en tiempo de ejecución los contextos de beans que me interesan.

GenericApplicationContext ctx = new GenericApplicationContext();
XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(ctx);
xmlReader.loadBeanDefinitions(new ClassPathResource("modelContext.xml"));
xmlReader.loadBeanDefinitions(new ClassPathResource("uiContext.xml"));
ctx.refresh();

Esto es lo que he hecho para uno de mis proyectos.En tus web.xml , puede definir los archivos Spring Bean que desea que utilice su aplicación:

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
      /WEB-INF/applicationContext.xml
      /WEB-INF/modelContext.xml
      /WEB-INF/ui.xml
    </param-value>
  </context-param>

Si esto no está definido en su web.xml, busca automáticamente /WEB-INF/applicationContext.xml

Otra cosa a tener en cuenta es que, aunque puedes hacer esto, si no eres un gran fanático de XML, puedes hacer muchas cosas en Spring 2.5 con anotaciones.

Sí, puede utilizar la etiqueta dentro del archivo bean "Master".Pero ¿qué pasa con el por qué?¿Por qué no enumerar los archivos en el parámetro de contexto contextConfigLocation de wab.xml o en la matriz de ubicaciones de bean factory?

Creo que varios archivos son mucho más fáciles de manejar.Puede elegir solo algunos de ellos para una prueba, simplemente agregar, cambiar el nombre o eliminar una parte de la aplicación y puede limitar diferentes aplicaciones con los mismos archivos de configuración (una aplicación web y una versión de línea de comandos con algunas definiciones de beans superpuestas).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top