Pregunta

Estoy creando una aplicación usando Spring MVC. Quiero hacer ciertos cambios en mi modelo para cada controlador en la aplicación. En particular, quiero insertar ciertos datos adicionales en el modelo que estarán presentes para todas las páginas de la aplicación.

Podría hacer esto de varias maneras: simplemente agregue los datos al final de cada Controlador, use una subclase de Modelo que agregue mis datos adicionales, use una subclase de ModelAndView que envuelva mi Modelo, use una subclase de VelocityView que envuelva la Modelo antes de usarlo ... Estoy seguro de que hay otras opciones.

Pero tengo una "elegancia" restricción: no quiero escribir código en todos y cada uno de los controladores, quiero que este comportamiento se defina en un lugar único . Idealmente, sería controlado por mi archivo de configuración de bean IOC.

¿Alguien tiene una recomendación sobre cómo lograr esto con elegancia?

¿Fue útil?

Solución

Los aspectos son un buen enfoque, pero Spring MVC lo hace aún más fácil: puede definir un HandlerInterceptor que se llamará antes o después de cada solicitud. En el método postHandle HandlerInterceptor (en su clase que implementa la interfaz HandlerInterceptor) puede agregar sus datos al ModelAndView. Usted define qué controladores deben ser interceptados en su archivo de configuración.

Otros consejos

Podrías echar un vistazo a usar Aspectos. Spring incluso tiene una extensión AOP que puede usar .

En resumen, un aspecto le permitiría definir el código una vez que luego se "tejería" en sus clases cuando compila las clases o cuando las carga el cargador de clases. Es algo relativamente avanzado y no es lo más intuitivo para los nuevos programadores, pero está destinado a resolver exactamente el problema al que te refieres.

Podría estar equivocado, pero sospecho que puede haber descrito sus requisitos incorrectamente.

Parece que está diciendo 'Quiero que se agreguen ciertos datos a mi modelo, para todos los controladores'.

Sospecho que quiere decir 'Quiero que ciertos datos estén disponibles para todas las vistas'.

Si mis sospechas son correctas, agregar los datos a su modelo está contaminando su modelo y violando el principio de responsabilidad única. Esto es especialmente cierto si se van a agregar los mismos datos a varios modelos. Tenga cuidado de no solo usar su modelo como un "portador" conveniente de los datos, donde los datos realmente no tienen nada que ver con el modelo.

Es cierto que no estoy completamente familiarizado con la forma de hacer las cosas de Spring MVC, pero un ejemplo más detallado de lo que está tratando de lograr puede permitir una discusión más informada.

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