Spring

RECU-0093 (Recurso Ficha Técnica)

Descripción

Spring es un framework open source que proporciona un marco de trabajo para el desarrollo de aplicaciones J2EE. El framework está basado en el uso de ficheros planos JavaBeans para la lógica de aplicación y archivos XML para la configuración.

Spring está basado en un conjunto de módulos que proporcionan todo lo necesario para desarrollar una aplicación empresarial. Además no es necesario basar la aplicación al completo en el framework de Spring, basta con hacer uso del/los módulos que requiera la aplicación e ignorar el resto.

Su componente principal consiste en un contenedor de Beans que nos permite, mediante Inversión de Control (IoC), acoplar las diversas partes de un aplicativo.

Toda instancia definida dentro del contenedor de bean es susceptible de:

  • Ser cambiada y/o acoplada, mediante IoC, sin ser intrusivo.
  • Ser sometida a Interceptores AOP. En particular, cabe resaltar la transaccionalidad, lo que hace que Spring tome más relevancia en la capa de Negocio.

Ventajas e inconvenientes

Hemos decidido realizar una comparativa con EJB3 al tener características similares, el resultado es el siguiente:

  • Manejo de transacciones
    • EJB sólo soporta JTA
    • Spring soporta: JTA, hibernate, JDO, JDBC, ODBC, etc.
  • Persistencia de entidades
    • EJB define su propio manejo de persistencia permitiendo la utilización de anotaciones en ORM, EJB QL y sentencias SQL nativas, además de integración con Hibernate.
    • Spring usa implementaciones ORM de terceros como Hibernate, Ibatis, JDO, OJB.
  • Programación Orientada a Aspectos
    • EJB usa interceptores por defecto que pueden ser especificados y aplicados a todos los componentes.
    • Spring provee servicios de aplicación en forma declarativa, puedes definir aspectos personalizados.
  • Configuración de la aplicación (Aplication Context).
    • EJB usa anotaciones de metadatos, pero es posible sobrescribirlas en el descriptor de despliegue.
    • Spring permite usar archivos XML de configuración, programación mediante la API y mediante un estándar JSR.
  • Seguridad
    • EJB soporta seguridad declarativa por medio de anotaciones de metadatos y descripciones en el descriptor de despliegue.
    • Spring aporta integración con la solución de código abierto Acegi (soporta seguridad declarativa basada en el uso de IoC y AOP).
  • Flexibilidad de servicios
    • EJB depende de la implementación de EJB. Si el servidor utilizado provee una estructura modular entonces sólo se requieren los servicios que este pueda usar.
    • Spring permite el uso de cualquier servicio usando un archivo XML de configuración.
  • Testeo de componentes
    • En EBJ la mayor parte de los componentes pueden ser testeados fuera del contenedor, pero el servicio de contenedor de objetos sólo puede ser testeado dentro del contenedor (como el EntityManager).
    • En Spring todos los componentes pueden ser testeados fuera del contenedor.

Ventajas del uso de Spring

  1. Spring recomienda el uso de Interfaces, si se decide no utilizar Spring, basta con reimplementar las interfaces.
  2. Spring no tiene los problemas que tienen los EJB, ya que estos sólo eran ejecutables dentro del contenedor de Ejb. Spring se puede ejecutar dentro de un contenedor Web o fuera de él en una aplicación Swing.

Inconvenientes del uso de Spring

  1. La configuración de Spring está inflada, es decir, para cada servicio que se tenga hemos de configurarlo en un XML de configuración. Aunque hay otras formas de configuración de Spring aparte del XML puro: programando por medio de la API, mediante un estándar JSR y con un mínimo XML y anotaciones.
  2. No se puede evaluar si un objeto ha sido bien inyectado más que en tiempo de ejecución. Aunque hay herramientas como Spring IDE que sí que ayudan.
  3. El contenedor de Spring no es ligero (si se usan todos los módulos disponibles), no es recomendable su uso en aplicaciones de tiempo real o en aplicaciones para móviles.

Requisitos e incompatibilidades

No hay nada relevante que se haya encontrado, lo único a destacar:

  • La versión del JDK instalado debe ser 1.4.1 o superior, es necesario Java5 para usar todo su rendimiento.
  • La clase SimpleMailMessage no admite fijar un charset.
  • JMX aún no se ha incorporado a la versión actual.
  • Necesita el uso de commons-logging 1.1
  • Cualquier aplicación anterior a la 2.5.0 puede desplegarse sin problemas.
  • Spring, por defecto, debe funcionar en una maquina virtual con capacidad para analizar esquemas xml. La única versión de java con ese soporte nativo es la número 5 o superior. Para poder usar Spring 2.5 en una versión de java inferior habrá que arrancar la máquina virtual con la propiedad java.endorsed.dirs apuntando a un directorio del sistema que contiene los jar con el analizador java adecuado para tratar los esquemas, como puede ser Xerces. Esto, que en principio pudiera ser un contratiempo, en realidad no lo es tanto, ya que casi todos los servidores de aplicaciones y motores de servlet ya vienen con esta propiedad declarada y correctamente configurada. Por lo que su repercusión real es prácticamente nula.
  • Si se piensa usar alguna de las nuevas formas de declarar las transacciones o aspectos con Spring 2.5 habrá que incluir los jar de aspectj que vienen con la distribución.

Interacciones

Debido a la característica de no intrusión, el framework Spring puede tener interacciones con cualquier subsistema o componente que se quiera, simplemente seleccionando el submódulo con el que se pretenda utilizar.

En este documento hemos estudiado la integración con Eclipse mediante un plugin denominado Spring IDE, dicha integración se comenta en el apartado siguiente. Dicho plugin proporciona un interfaz gráfica para el usuario y algunas facilidades para la manipulación de los diferentes ficheros de configuración de Spring.

 

Debido a la característica de no intrusión, el framework Spring puede tener interacciones con cualquier subsistema o componente que se quiera, simplemente seleccionando el submódulo con el que se pretenda utilizar.

En este documento hemos estudiado la integración con Eclipse mediante un plugin denominado Spring IDE, dicha integración se comenta en el apartado siguiente. Dicho plugin proporciona un interfaz gráfica para el usuario y algunas facilidades para la manipulación de los diferentes ficheros de configuración de Spring.