Seleccionar página

!– @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } A.sdfootnoteanc { font-size: 57% } –>

Spring Framework está diseñado como una serie de módulos que pueden trabajar independientemente uno de otro, lo que quiere decir que puedes únicamente los módulos que necesites. Además intenta mantener un mínimo acoplamiento entre la aplicación y el propio framework de forma que podría ser desvincualda de élsin demasiada dificultad.

El sub-framework SpringMVC es solo una parte del diseño global, que va mucho más allá

  • Core: Como su nombre indica, es el núcleo de Spring. Permite técnicas de Inversión del Control (IoC) como la inyección de dependencias.
  • Context: Proporciona herramientas para acceder a los beans y da soporte a propagación de eventos, resource bundles, carga de recursos y creación transparente de contextos por parte de los contenedores.
  • DAO: Proporciona una capa de abstracción JDBC y una forma de administrar transacciones.
  • ORM: Provee capas de integración para APIs de mapeo objeto-relacional.
  • AOP: Proporciona una implementación de programación orientada a aspectos, permitiendo definir puntos de corte e interceptores.
  • Web: Provee de características de integración orienteadas a la web, como funcionalidad multipartes, inicialización de contextos mediante servlet listeners y un contexto de aplicación orientada a la web. También permite integrar de forma sencilla otros frameworks como Struts, JSF o WebWork.
  • Spring MVC: Provee una implementación Modelo-Vista-Controlador que permite el uso del resto de funcionalidades del Spring Framework.

Modelo de programación
Spring MVC es un framework basado en peticiones (request). Define una serie de interfaces claves para cada una de las responsabilidades que deben ser manejadas durante la petición, que el usuario puede implementar. Los interfaces y su responsabilidad son los siguientes:

HandlerMapping: Selecciona el manejador adecuado de la petición

HandlerAdapter: Ejecuta el manejador de la petición.

Controller: Procesa la petición y redirige a la respuesta correspondiente.

View Devuelve una vista al cliente.

ViewResolver Selecciona una vista basada en su nombre lógico.

HandlerInterceptor Permite interceptar las peticiones, como un filtro.

LocaleResolver: Determina el locale de el usuario.

MultipartResolver: Facilita el trabajo con peticiones multipart, usadas para la subida de archivos.

El funcionamiento paso a paso sería así:

1. El usuario realiza una petición de un recurso en la aplicación web.

2. El Spring Front Controller1 , llamado Dispatcher Servlet, intercepta la petición y busca el Handler Mappings adecuado

3. El Handler Mappping se encarga de buscar al Controller correcto de entre una lista definida en un archivo de configuración.

4. Conla ayuda de Handler Adapters, el Dispatcher Servlet envía la petición al controller.

5. El controller procesa la petición y devuelve el Modelo y la Vista como un objeto ModelAndView al FrontController

6. El Front Controller busca la vista adecuada consultando al ViewResolver.

7. La vista seleccionada es renderizada al usuario.

Capas afectadas

Se centra en la capa intermedia y proporciona enganches para manejar la solución elegida para la capa de presentación y de integración.

MVC push/pull

Push.

EL Controller permite asociar un objeto al ModelAndView, que estará disponible en la vista seleccionada.

Internacionalizacion (i18n) y localización (L10n)

Permite acceder a mensajes multiidioma definidos por el usuario a través de un bean MessageSource

Sistema de seguridad

Spring viene integrado con un framework de seguridad, acegi security, que gestiona todo el mecanismo de login, autentificación y autorización.

Permite entre otras cosas controlar la seguridad de tu aplicación web de manera declarativa, posee seguridad basada en roles, en listas de control de acceso, Single Sing On. Se integra con JAAS (Java Authentication and Authorization Service) y con LDAPs (Lightweight Directory Access Protocol)

Sistema de plantillas (templates)

No proporciona un mecanismo de plantillas propio, ya que permite elegir la tecnología a utilizar para la vista (JSP, JSF, velocity, PDF…) integrándola con el resto de la aplicación.

Sistema de validación

Provee un sistema de validación que no está ligado a una capa concreta, si no que puede ser usado en cualquier capa de la aplicación. Provee de un interfaz para escribir tu lógica de validación y se encarga del manejo de errores.

El sistema de seguridad acegi también ofrece un paquete de validación.

Sistema de navegación (pageflow)

Ofrece el módulo Spring Web Flow. Proporciona un motor capaz de capturar los flujos de páginas de una aplicación e integrarlo con otros frameworks de presentación como JSF. Utiliza estructuras declarativas basadas en máquinas de estados.

Éste es un módulo autónomo que puede reutilizarse en diferentes aplicaciones que sigan una misma lógica de navegación como por ejemplo, carritos de la compra.

Sistema de caché

No proporciona un sistema de caché nativo, pero su diseño permite la integración de módulos que se encarguen de ello, como por ejemplo Spring AOP Cache.

Éste utiliza la AOP proporcionada por Spring para interceptar las invocaciones de métodos y almacenar en memoria el resultado de operaciones como una consulta a una base de datos.

Testeabilidad

Spring proporciona un estupendo marco para el testing. Al estar basado en POJOs, los test de unidad son triviales con su adaptación de JUnit. Para los test de integración provee herramientas basadas en su capacidad de IoC y de transaccionalidad.

Mapeo Objeto-Relacional (ORM)

Proporciona integración con varias implementaciones ORM. Existen dos formas de integración, a través de plantillas predefinidas del módulo SpringDAO o codificando DAOs directamente contra al API del ORM elegido.

Cualquiera de las dos aproximaciones ofrece los beneficios de Spring, como ser configurados a través de IoC, transaccionalidad, wrapping común para excepciones de acceso a datos y manejo de la configuración independiente de la implementación.

Programación Orientada a Aspectos (AOP)

Spring permite el uso de aspectos en tiempo de ejecución mediante proxys dinámicos, por que sólo hace falta la JDK para poder implementar los aspectos. La desventaja es sólo pueden pueden usarse aspectos a nivel de método, no a nivel de clase ni de instancia. Aunque en la gran mayoría de los casos es suficiente, permite la integración de AspectJ que ofrece funcionalidad completa.

Spring usa AOP para proporcionar servicios empresariales de manera declarativa, especialmente como reemplazo para los servicios declarativos de EJB. El más importante de dichos servicios es el manejo declarativo de transacciones, que esta construido sobre la abstracción de transacciones de Spring.

Inyección de dependencias (DI)

Esta es una de las bases de Spring sobre la que se cimienta el resto de la arquitectura. La DI se encuentra en el corazón de Spring.

A través de la BeanFactory, el contenedor de IoC instancia los objetos y maneja las relaciones entre ellos, añadiendo funcionalidades como pooling o swapping (intercambio).

Ajax

Al permitir la elección de la tecnología de la capa de presentación, el soporte para Ajax dependerá principalmente de la elección.

Configuración

La configuración de Spring está basada en XML. Al no tener anotaciones no le hace dependiente de Java EE 5, pero resulta en archivos de configuración inflados o una gran cantidad de archivos de configuración distintos.

Ofrece la ventaja de “XML extensible”, que permite a frameworks externos escribir sus propios archivos de configuración que puede ser acoplado a los archivos de configuración de Spring.

Extensibilidad

El diseño de Spring está pensado para ofrecer un modelo de como debe trabajar la aplicación y cómo se comunican sus partes. Está expresamente concebido para que deba ser extensible y acoplable con otros frameworks, ya que no ofrece una solución completa que abarque desde la presentación al modelo.

Madurez

A pesar de su juventud (Spring 1.0 fue lanzado en el año 2003), Spring ha demostrado tener una arquitectura sólida y, sobre todo, muy flexible, capaz de adaptarse a los requerimientos de proyectos grandes y pequeños.

Última versión

La última versión disponible de Spring es la 2.0.7

Curva de aprendizaje

No puede decirse que la curva de aprendizaje sea suave debido a que Spring introduce conceptos relativamente novedosos como son la AOP o la IoC y a la cantidad de configuración que hay que manejar.

Sin embargo para alguien con experiencia en desarrollo J2EE y familiarizado con dichos conceptos no debería resultar muy dificil. Para facilitar el desarrollo existen IDEs opensource como SpringIDE, que ayudan entre otras cosas a lidiar con los archivos de configuración y diseñar el flujo de la aplicación.

Documentación

Cuenta con una buena documentación oficial que cubre todos sus módulos y funcionamiento así como su integración con otros frameworks. También tiene una nutrida comunidad de usuarios que aportan artículos y trabajos.