Voy a empezar una serie de artículos sobre uno de los frameworks mas populares en J2EE como es Spring Framework. En este primer artículo comentaré lo que es Spring y porque ha tenido tanto éxito.
En el manual de referencia dice: “Spring Framework is a Java platform that provides comprehensive infrastructure support for developing Java applications. Spring handles the infrastructure so you can focus on your application.”
Traducido, Spring Framework es una plataforma que nos proporciona una infrastuctura que actúa de soporte para desarrollar aplicaciones Java. Spring maneja toda la infrastructura y así te puedes centrar en tu aplicación. Diciendolo mas coloquialmente, Spring es el “pegamento” que une todos los componentes de la aplicación, maneja su ciclo de vida y la interacción entre ellos.
Spring Framework es un contenedor ligero (“lightweight container”) en contraposición a un un servidor de aplicaciones J2EE. En el caso de una aplicación web, te basta con un contenedor de servlets como Tomcat o Jetty. Pero Spring no solo se puede usar para crear aplicaciones web, se podría usar para cualquier aplicacion java, aunque su uso habitual sea en entornos web, nada te impide utilizarlo para cualquier tipo de aplicación.
¿Porque surgió Spring Framework?
En los inicios de las aplicaciones J2EE, EJB era muy complejo y tedioso, tanto la version 1 como la 2. Yo tengo la suerte de haber trabajado con EJB a partir de la versión 3, pero otros no corrieron la misma suerte, y trabajaron con versiones anteriores. No puedo profundizar mucho, por mi desconocimiento de esas versiones, pero todos los que han trabajado con ellas, comentan que era un infierno. Pero para eso estaba el amigo Rod, para venir al rescate…
La primera versión de Spring se lanzó en junio de 2003, aunque el gran lanzamiento se hizo en Marzo de 2004, con la versión 1.0. Meses mas tarde, en concreto el 21 de Junio de 2004, Rod Johnson, creador de Spring, publicó el libro: “J2EE development without EJB“. Recomiendo encarecidamente su lectura, te hace comprender los motivos por los que diseñar Spring. Lo que mas me gustó del libro, es comprobar como algo complicado lo implementa de manera tan sencilla y elegante.
Yo llevo trabajando con Spring desde septiembre de 2005 y ya no puedo vivir sin él. Hoy en día Spring ha crecido mucho, si hacéis una busqueda en cualquier portal de empleo, vereis que tiene mucha demanda. Incluso ya no es exclusivo de Java, pues ya hay versión para .NET, bautizada como Spring.NET.
Inversión de control e inyeccción de dependencias
Abreviado del ingles IoC y DI respectivamente. Hoy en día ya no se usa practicamente el primer término, sino el segundo. Cuando tu diseñas una aplicación en Java dispones de muchos objetos que se relacionan entre sí mediante composición. Para enlazar dos objetos tendrías que inyectarle a uno de ellos una instancia del otro. Esto lo realiza Spring por tí, por eso se llama Inversión de control, porque es spring quien se encarga de estas dependencias, instancia los objectos y los inyecta por reflexión. A grandes rasgos, declaras en un XML los componentes de tu aplicación y sus dependencias. Spring lee este XML, llamado Application Context, crea los componentes y sus relaciones entre ellos. Las últimas versiones de Spring, ya permiten anotaciones, y se puede anotar una propiedad en una clase mediante @Autowired para que Spring busque la clase correspondiente, la instancie y la inyecte, ahorrandonos bastante código XML.
La “Dependency injection”, ya no es un concepto propio de Spring, otros frameworks lo copiaron. Desde la version 6 de J2EE existe la anotacion @Inject para hacer exactamente lo mismo. Otro menos conocido, como Guice, de Google, tambien lo he utilizado en un proyecto.
Módulos
Spring es bastante grande, por ello el proyecto esta dividido en módulos. No siempre se utiliza en un proyecto todo lo que tiene spring. Por poner un ejemplo, podrías utilizar Struts para la parte web, en vez de Spring MVC. Si utilizas un framework de persistencia, como Hibernate o iBatis, tendrías que incluir spring-orm en tu classpath.
Spring tiene unos 20 módulos:
Yo recomiendo usar Maven para desarrollar en Java. Todos los artefactos de Spring se encuentran en el repositorio central y te olvidas de las dependencias entre ellos. Imagina que quieres usar solo el módulo Spring MVC pero no sabes que dependencias tiene, ya tienes que mirar documentación y meter manualmente los jar que necesitas en tu classpath. Con Maven especificas que quieres usar spring-mvc y te olvidas:
<dependencies> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-mvc</artifactid> <version>3.0.0.RELEASE</version> <scope>runtime</scope> </dependency> </dependencies>
Maven será también objeto de varios artículos en un futuro no muy lejano.
Conclusión
He querido dar una breve introducción de Spring. En próximos episodios, crearé una aplicación que iré desarrollando a lo largo de esta serie.
Mas información | Springsource.org | Manual de referencia de Spring 3.1.0