Una de las tecnologías interesantes que aprendí este año fue Spring Framework.

Tuve que estudiarlo y vengo usándolo a diario en el trabajo. Qué mejor forma de fijar mis conocimientos que intentando explicar Spring. Lo único que sabía hasta el momento que me puse a estudiar era “es un framework de inyección de dependencias”. Poco sabía sobre inyección de dependencias, más que una teoría básica. En su núcleo, eso es Spring, pero en verdad hoy día cuenta con mucho más que eso. Actualmente es muy popular, siendo tomado en cuenta como alternativa o reemplazo de los Enterprise JavaBean (EJB). En su momento empecé con Spring 2.5, pero creo que a modo de introducción los conceptos básicos se mantienen en Spring 3 (versión actual).

Spring Framework 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

eventos de ciclo de vida. DAO . Cómo seguir Como siempre. En su núcleo (Core) se encuentra el BeanFactory – el contenedor fundamental de Spring y quien se encarga de la inyección de dependencias. EJB. etc. Además cuenta con manejo de transacciones a través de AOP. validación y mejor integración con AOP.Módulos de Spring El diagrama muestra los módulos con los que cuenta Spring (hasta la versión 2. Tiene una capa de expeciones sobre los mensajes de error provistos por cada servidor específico de base de datos. abstrae el código de acceso a datos de una manera simple y limpia. Web – Módulo que aporta clases especiales orientadas al desarrollo web e integración con tecnologías como Struts y JSF. la documentación oficial es un buen recurso donde ir estudiando. AOP – provee la implementación de AOP. Hibernate e iBatis. Cuenta con el paquete Spring MVC.Provee una capa de abstracción sobre JDBC. JMS. El contenedor ApplicationContext se basa en BeanFactory y extiende su funcionalidad con soporte para i18n.5). permitiéndonos desarrollar interceptores de método y puntos de corte para desacoplar el código de las funcionalidades transversales. . una implementación del conocido patrón de diseño aplicando los principios de Spring. JEE – Provee integración con aplicaciones Java Enterprise Edition así como servicios JMX. ORM – Provee la integración para las distintas APIs de mapeo objeto-relacional incluyendo JPA. JDO.

y creo que sería un buen ejercicio postear sobre eso también. Cubre Spring 2. pero ya se puede pre-ordenar Spring in Action – Third Edition . Me interesa sobre todo ahondar en lo que ví sobre la manera en que el BeanFactory y el ApplicationContext realizan la inyección de dependencias y el ciclo de vida de los SpringBeans. Espero contar con el tiempo suficiente para continuar publicando sobre lo que he ido aprendiendo de esta tecnología. y particularmente si lo conocen y lo usan. . creo que es una de las formas más sanas y dinámicas de desarrollar aplicaciones Java hoy en día. uno puede salir andando con Spring. Ya después se podrá seguir ahondando en el tema con documentación o libros más específicos según los módulos que se quieran usar.5. si no conocían Spring qué les pareció. era lo que buscaba al momento de dar con este libro. Tras leerlo. Más adelante también debería estudiar un poco más intensamente Spring MVC (sobretodo a partir de Spring 3). y armar un proyecto básico para mostrar algo de código.Spring in Action Un libro que está muy recomendado y me ayudó mucho al momento de estudiar Spring fue Spring in Action – Second Edition . versión actualizada a lo más reciente de Spring. He leído (y escuchado) que este libro es básico y solo ofrece pero bueno. dentro del paradigma de orientación a objetos. Me interesó mucho el uso de Spring. Espero sus comentarios. En el próximo documento me gustaría hablar un poco más sobre el contenedor de inyección de dependencias. qué conocimiento pueden agregar para complementar el documento.