mvc locations files example java spring java-ee

java - locations - Spring context files organization y mejores prácticas



spring xml resources mapping (7)

Comience con applicationContext.xml y sepárelo cuando haya muchos frijoles que tengan algo en común.

Para darle una idea de una posible configuración, en la aplicación en la que estoy trabajando actualmente, esto es lo que tengo en el servidor:

  • applicationContext.xml
  • securityContext.xml
  • schedulingContext.xml
  • dataSourcecontext.xml
  • spring-ws-servlet.xml (beans relacionados con Spring Web Services)

Para los clientes de GUI, dado que este proyecto tiene varios, hay una carpeta con archivos de contexto compartidos, y además de eso, cada cliente tiene su propia carpeta de contexto. Archivos de contexto compartido:

  • sharedMainApplicationContext.xml
  • sharedGuiContext.xml
  • sharedSecurityContext.xml

Archivos específicos de la aplicación:

  • mainApplicationContext.xml y
  • guiContext.xml y
  • commandsContext.xml (estructura del menú)
  • sharedBusinessLayerContext.xml (beans para conectarse al servidor)

Hemos comenzado a usar Spring framework en mi proyecto. Después de familiarizarnos con las características básicas (IoC), también comenzamos a usar Spring Aop y Spring Safety.

El problema es que ahora tenemos más de 8 archivos de contexto diferentes y creo que no pensamos lo suficiente en la organización de esos archivos y sus roles. Se presentaron nuevos archivos a medida que el proyecto evolucionó. Tenemos diferentes archivos de contexto para: metadatos, aop, autorización, servicios, recursos web (es una aplicación REST). Entonces, cuando un desarrollador quiere agregar un nuevo bean, no siempre está claro en qué archivo debe agregarlo. Necesitamos metodología.

La pregunta:

¿Existe una mejor práctica para la organización de archivos de primavera?

¿Deberían los archivos de contexto encapsular capas (DAL, Business Logic, Web) o casos de uso? o fluye?


Encuentro que los rompo por capas.

Cuando escribo pruebas unitarias para cada capa, anulo el contexto de producción con los valores pertinentes para las pruebas.


Los archivos de contexto de Spring contienen definiciones de beans, por lo que creo que es mejor seguir el principio de OO y estructurarlos de la misma forma que se estructuran las clases en los paquetes. Por lo general, creamos paquetes para encapsular un conjunto de clases que trabajan juntas para resolver un problema específico. Un paquete generalmente encapsula una capa horizontal (capa de base de datos, middleware, lógica de negocio o parte de ellos). Hay ocasiones en que un paquete contiene clases que corresponden a una capa horizontal (caso de uso o flujo como usted ha mencionado). En general, recomendaría crear un archivo de contexto para cada paquete o conjunto de paquetes. Cuando agrega un nuevo bean, agréguelo al archivo de contexto que corresponde al paquete de la clase.

Por supuesto, esta no debería ser una regla muy estricta, ya que podría haber casos en los que sería beneficioso seguir otra práctica.


Romper la configuración en archivos separados me resulta útil en términos de prueba. En un proyecto pequeño, pondré la configuración de Spring Security en "securityContext.xml" y el resto de mis beans en "applicationContext.xml". Luego, al ejecutar las pruebas de integración, es fácil habilitar o deshabilitar la seguridad de manera simple al elegir si incluir securityContext.xml. Esto casi se asemeja al AOP de una manera, ya que agrega más funcionalidad a la aplicación al elegir si desea incluir archivos particulares.


Sí, divide en roles similares para los granos en el mismo. En cuanto a las anotaciones, creo que "pueden" tener un pequeño papel que desempeñar, tal vez con definiciones de transacción, pero de lo contrario, solo obligan para siempre tu código y podrías agregar referencias de primavera (o de cualquier otro tercero) directamente en todas partes. Para mí, anotaciones = atajo y deuda técnica. No son configurables externamente, por lo que no es trivial volver a cablear, ni desenvolver su código, y limita la reutilización. Un bean determinado queda para siempre atascado con sus dependencias anotadas y su configuración, de modo que no puede ser utilizado por múltiples proyectos / procesos simultáneamente con diferentes conexiones y configuraciones. solo mis 2 centavos.


Si todavía está razonablemente temprano en el proyecto, le aconsejaría encarecidamente que observe la configuración impulsada por anotaciones. Después de convertir a anotaciones, solo tenemos 1 archivo xml con definiciones y es realmente bastante pequeño, y este es un proyecto grande. La configuración impulsada por la anotación pone el foco en su implementación en lugar del xml. También elimina más o menos la capa de abstracción bastante redundante que es el nombre de "bean" de primavera. Resulta que el nombre del bean existe principalmente debido a xml (El nombre del bean aún existe en la configuración de la anotación pero es irrelevante en la mayoría de los casos). Después de hacer esto cambiar a un gran proyecto, todos están 100% de acuerdo en que es mucho mejor y también tenemos evidencia bastante decente de que es un entorno más productivo.

Realmente recomendaría a cualquiera que esté usando la primavera para cambiar a las anotaciones. Es posible mezclarlos también. Si necesita un consejo de transición, supongo que es fácil preguntar por SO;)


Seguiría las recomendaciones de Spring y colocaría los archivos de contexto en META-INF/spring como se describe en la documentación de Spring Roo . En general, recomendaría probar roo y seguir la estructura y el diseño de su proyecto.

Ejemplo

src/ +-- main/ | +-- java/ | /-- resources/ | +-- META-INF/ | | /-- spring/ ‹ normal spring context files | | +-- context.xml | | /-- context-services.xml | /-- other files | +-- test/ | +-- java/ | /-- resources/ | +-- META-INF/ | | /-- spring/ ‹ context files for testing | | +-- context-test.xml | | /-- context-dao-test.xml | /-- other files | /-- pom.xml

Spring XML vs anotaciones

Hay muchos buenos artículos sobre el tema, pero me gustaría romper un concepto erróneo común, porque ambos enfoques tienen sus ventajas: si desea separar la configuración de la implementación real, es más fácil con XML, pero puede lograr el Lo mismo con las anotaciones, como dijo Krosenvold . Sin embargo, cuando se usan archivos de configuración XML, los nombres de los beans solo son necesarios, si el bean tiene que ser referenciado directamente. Siempre puede usar auto-wiring por nombre o por tipo.

Lo único importante es que debe mantenerse constante durante todo el proyecto o, cuando sea posible, en todos los proyectos de su empresa.