De los cuatro temas principales que quiero comentar: AppFuse, Struts 2.0., Hibernate, y Spring 2.0., empezaré por este último.
Para mí, es el más difícil de entender de los cuatro, ya que es una filosofía de programación muy diferente a lo que había visto hasta ahora. Ahora bien, una vez empiezas a utilizarlo te das cuenta que es muy sencillo y a la vez muy cómodo, que te permite solucionar problemas complejos de una forma muy sencilla.
También encuentro a faltar alguna guía que lo explique sencillito y por eso empiezo por este, para ver si solucionamos algo.
Voy a intentar explicarlo de la manera más sencilla posible, tal como me hubiera gustado que me lo explicaran a mí y limitado a mis conocimientos. Seguro que Spring hace mas cosas que esto que explico aquí, pero de momento es lo que conozco y para lo que lo utilizo.
Introducción
Para mí, Spring es una filosofía de programación. Lo que intenta es desligar las capas de nuestra aplicación para que cuando tengamos que cambiar alguna de las tres capas (presentación, negocio y datos) no tengamos que tocar el código fuente de las otras dos.
¿Qué “arregla” Spring?
Normalmente, cuando realizamos una aplicación java, si necesitamos un nuevo objeto de nuestra aplicación, lo que hacemos es hacer un new de este y ya está.
Esto hace que el código de las tres capas de nuestra aplicación quede fuertemente ligado ya que, por ejemplo, si en la capa de negocio necesitamos acceder a la base de datos, crearemos un objeto del Objeto de acceso a Datos (Dao) que corresponda a la entidad a la que queremos acceder.
Por ejemplo, Si ese Dao accede a una base de datos Oracle, el día que sustituyamos Oracle por un fichero de texto plano, tendremos que crear un nuevo objeto Dao y además tendremos que todas las clases de negocio que hagan un new del Dao para acceder a Oracle.
Como ejemplo no es muy bueno, pero que le vamos a hacer…. No doy para más.
Spring soluciona esto. Spring evita que hagas new en tus programas. Tu declaras la variable en tu código fuente y él, inyecta (bonito palabro…) en tu variable el objeto que le hayas dicho tu mediante un fichero de configuración.
Con esto evitamos que tengas que modificar tu clase de negocio, y solo tendrías que crear una clase nueva de acceso a datos e inyectarla en tu clase de negocio.
Esto te permite que, si tu capa de negocio funciona, NO LA TOQUES!!! Virgencita que me quede como estoy….
Si cambias tu DAO y tu aplicación deja de funcionar sabes que es del DAO ya que no has tocado el código de tu parte de negocio.
¿Cómo lo hace?
Bien, la manera de solucionarlo es bastante sencilla, una vez sabes como funciona.
Principalmente se hacen cuatro cosas:
1.- Creas un interface que tendrás los métodos que necesitas de tu clase.
2.- Creas una clase que implementa tu interface.
3.- En tu clase, donde necesitas hacer un new de tu objeto, no declaras dicho objeto, sino declaras la interface que hemos creado antes. SOLO declaras la variable objeto, no le haces un new, NO creas el objeto.
4.- Y ahora viene lo bueno, en un archivo de configuración le dices:
“En mi aplicación, donde he declarado la interface tal, me inyectas el Objeto pascual (el del punto 2)”
Conclusión
Como podéis ver la palabra inyección se usa mucho. Básicamente es eso lo que hace Spring. Inyectar a nuestras variables, Objetos que le decimos con un archivo de configuración.
Con esto conseguimos que nuestra aplicación funcione de una manera u otra, tome los datos de un sitio u otro, o se use la interficie A o B modificando únicamente los archivos de configuración.
Ahora tacaría un ejemplo práctico, pero ya me estoy enrollando mucho y es mejor que dejemos madurar la idea y en pocos días postearé un caso práctico.