Comenzando con una breve intruduccion teorica con el objeto de empezar como se debe y para aquellos que siguen este blog sepan donde estamos parados y hacia donde se quiere llegar y en que direccion.
Spring “es un framework de inyección de dependencias”. Actualmente es muy popular, siendo tomado en cuenta como alternativa o reemplazo de los Enterprise JavaBean (EJB).
Surgio inicialmente como una alternativa a los EJB propuestos la especificacion 1.4 de JavaEE, se buscaba separar la logica de negocio, los beans y la persistencia con sus correspondientes accesos a bd, el estandar 1.4 obligaba a mezclarlos y Spring propuso separarlos, en la actualidad spring y java ee 6 comparten muchas caracteristicas y ambos son bastante eficientes.
Spring es un framework liviano y no intrusivo: generalmente los objetos que programamos no tienen dependencias en clases específicas de Spring. Sus características principales son inyección de dependencias y programación orientada a aspectos. Intentaré hacer una breve explicación de ambas sin entrar en detalle de cómo se implementan en Spring (esto vendrá más adelante).
Inyección de dependencias
El objetivo es lograr un bajo acoplamiento entre los objetos de nuestra aplicación. Con este patrón de diseño, los objetos no crean o buscan sus dependencias (objetos con los cuales colabora) sino que éstas son dadas al objeto. El contenedor (la entidad que coordina cada objeto en el sistema) es el encargado de realizar este trabajo al momento de instanciar el objeto. Se invierte la responsabilidad en cuanto a la manera en que un objeto obtiene la referencia a otro objeto.De esta manera, los objetos conocen sus dependencias por su interfaz. Así la dependencia puede ser intercambiada por distintas implementaciones a través del contenedor. En resumen, programaremos orientado a interfaces e inyectaremos las implementaciones a través del contenedor.
Programación orientada a aspectos
Se trata de un paradigma de programación que intenta separar las funcionalidades secundarias de la lógica de negocios. En inglés denominan a estas funcionalidades “cross-cutting concerns” algo que se traduciría como “preocupaciones transversales”. Por ejemplo los loggers, la seguridad, el manejo de transacciones, etc., son funcionalidades que atraviesan nuestro programa en varias abstracciones de éste. Por lo tanto corremos el riesgo de caer en la repetición de código y el acoplamiento entre nuestra lógica de negocios y la implementación de los cross-cutting concerns.La AOP (Aspect-Oriented Programming) busca modularizar estos servicios y aplicarlos de manera declarativa a los componentes que deban afectar.
Módulos de Spring
El diagrama muestra los módulos con los que cuenta Spring (hasta la versión 2.5). En su núcleo (Core) se encuentra el BeanFactory – el contenedor fundamental de Spring y quien se encarga de la inyección de dependencias. El contenedor ApplicationContext se basa en BeanFactory y extiende su funcionalidad con soporte para i18n, eventos de ciclo de vida, validación y mejor integración con AOP.AOP – provee la implementación de AOP, permitiéndonos desarrollar interceptores de método y puntos de corte para desacoplar el código de las funcionalidades transversales.
DAO - Provee una capa de abstracción sobre JDBC, abstrae el código de acceso a datos de una manera simple y limpia. Tiene una capa de expeciones sobre los mensajes de error provistos por cada servidor específico de base de datos. Además cuenta con manejo de transacciones a través de AOP.
ORM – Provee la integración para las distintas APIs de mapeo objeto-relacional incluyendo JPA, JDO, Hibernate e iBatis.
JEE – Provee integración con aplicaciones Java Enterprise Edition así como servicios JMX, JMS, EJB, etc.
Web – Módulo que aporta clases especiales orientadas al desarrollo web e integración con tecnologías como Struts y JSF. Cuenta con el paquete Spring MVC, una implementación del conocido patrón de diseño aplicando los principios de Spring.
Este blog se centrará inicialmente en Spring MVC.
No hay comentarios:
Publicar un comentario