Introducción a Spring Framework Java

Publicado el Lunes, 29 de noviembre de 2010

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

Módulos de Spring

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.

Cómo seguir

Como siempre, la documentación oficial es un buen recurso donde ir estudiando.

Spring in Action

Spring in Action

Un libro que está muy recomendado y me ayudó mucho al momento de estudiar Spring fue Spring in Action - Second Edition. Cubre Spring 2.5, pero ya se puede pre-ordenar Spring in Action - Third 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 una introducción, pero era lo que buscaba al momento de dar con este libro. Tras leerlo, 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.

Me interesó mucho el uso de Spring, dentro del paradigma de orientación a objetos, creo que es una de las formas más sanas y dinámicas de desarrollar aplicaciones Java hoy en día.

Espero contar con el tiempo suficiente para continuar publicando sobre lo que he ido aprendiendo de esta tecnología. 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.

Más adelante también debería estudiar un poco más intensamente Spring MVC (sobretodo a partir de Spring 3), y creo que sería un buen ejercicio postear sobre eso también. Espero sus comentarios, si no conocían Spring qué les pareció, y particularmente si lo conocen y lo usan, qué conocimiento pueden agregar para complementar el post.

En el próximo post me gustaría hablar un poco más sobre el contenedor de inyección de dependencias, y armar un proyecto básico para mostrar algo de código.

20 comentarios en este post

Feed de comentarios
  1. Avatar

    harley 29 noviembre. 2010 - 09:50

    Simplemente, es un framework espectacular. Hoy en dia desarrollo a diario con el multiples proyectos, la injeccion de dependencias es lo mejor que trae a mi entender. Todavia no empece a trabajar con la version 3, sigo con la 2.5.6 y es realmente estable y muy buena.

    • Avatar

      Fernando 29 noviembre. 2010 - 19:54

      Es un framework bastante popular en mi trabajo. Y me resultó bastante simple e intuitivo una vez que se aprende a usarlo.

      De a poco iré leyendo sobre Spring 3 para aprender lo nuevo de esta versión, e iré posteando por acá en lo posible lo que vaya aprendiendo. Pero la versión 2.5 anda muy bien por ahora.

  2. Avatar

    Roberto Briones 29 noviembre. 2010 - 12:31

    Me parece interesante que postees al respecto, yo también estoy interesado en Spring más sin embargo he rehuído un poco a la documentación en Inglés puesto que siento que nunca serán igual que un buen tutorial, ya que a mi parecer la documentación da por hecho que ya entiendes algo del tema. Como sabrás hay poca información en español, así que siempre viene bien cuando alguien como tú toma la iniciativa para mostrar lo poco o mucho que ha aprendido.
    Por otro lado te quería preguntar si ya has comprado alguna vez en Amazon ya que el libro parece barato a mi gusto como para pre-ordenarlo, yo soy de México y me parece que tú de Uruguay así que quizá no me puedas dar una experiencia similar, pero al menos saber si no hay problema con los envíos internacionales.

    Un saludo.

    • Avatar

      Fernando 30 noviembre. 2010 - 00:53

      Roberto, qué bueno tenerte comentando por acá de nuevo.

      Es cierto que hay poca información en español, pero siempre por algún lado se consigue. Espero que te haya servido la introducción a Spring. Intentaré seguir posteando al respecto, ya que es un framework bastante interesante y fácil de aprender (al menos en el uso que le he venido dando, jeje).

      Sí he comprado bastantes libros en Amazon. El tema con los libros es que por lo menos en Uruguay, no pagan impuestos en Aduana. Por esto, pasan sin problemas por Aduana y llegan a casa. Supongo que no habrá problemas pidiendo un solo libro. Además probablemente el envío desde USA a México sea más barato que a Uruguay.

      Cualquier cosa nos comentas.

      Saludos!

  3. Avatar

    Richard 8 mayo. 2011 - 00:03

    Estoy iniciandome en spring, que IDE me recomiendas para aprender practicar Spring, aunque seguro me vas a decir que es independiente, pero me caería bien la opinión de expertos.gracias

    • Avatar

      Fernando 8 mayo. 2011 - 14:10

      Hola Richard, en este caso si bien es independiente, el IDE puede ayudar mucho ya que estás trabajando con un framework que hace las cosas a su manera. Las herramientas del IDE te pueden facilitar el trabajo, al automatizar y agilizar algunas tareas comunes a los proyectos con este framework.

      SpringSource mismo ofrece su solución basada en Eclipse: Spring Tool Suite. Probablemente sea lo mejor para empezar. Personalmente uso Eclipse mas algunos plugins de Spring, pero es prácticamente lo mismo.

      Creo que NetBeans también cuenta con plugins para Spring Framework, pero no he probado nada de esto. De todas formas para comenzar te recomiendo Spring Tool Suite de SpringSource.

      ¡Saludos!

  4. Avatar

    anon 23 agosto. 2011 - 00:05

    Hola.

    He comenzado a meterme en temas de java para web. Ya comprendo algunas cosas básicas de java para web, pero en la vida real me han pedido que busque información de frameworks que permitan principalmente 2 cosas: ser fáciles de aprender, y que permitan hacer desarrollos de módulos o modificaciones rápidas, porque en el sistema que se pretende hacer llegan cambios repentinos de requerimientos.
    En lo personal, tengo nulo conocimiento de frameworks aunque he comenzado a investigar, y segun he leido, JSF es de los más faciles y tapestry de los más productivos pero dificiles.
    ¿Recomienda spring para esto, o conoce más frameworks que pueda recomendar porfavor?

    • Avatar

      Fernando 24 agosto. 2011 - 10:02

      Tengo experiencia con Java EE (algo de Seam) y Spring, pero no conozco otros frameworks como Struts y demás. Sí te recomendaría Spring por lo fácil de aprender, aunque Spring MVC – la parte web – asusta un poco al principio, pero sí se le agarra la mano fácil. Seam es en teoría super productivo pero no sé qué tal funciona con las modificaciones rápidas.

      Te recomendaría que leas un poco sobre las distintas opciones y veas cuál se adapta más a tu necesidad. Por facilidad, popularidad y modularidad, te recomiendo Spring.

      ¡Saludos!

      • Avatar

        anon 27 agosto. 2011 - 18:33

        He leido que Spring es enorme y la parte MVC es solo un módulo. Supongo que por ahora leeré este tutorial para introducirme y más o menos ver también la integración con hibernate.
        Leería un libro, pero… es demasiada información y tengo poco tiempo disponible.

        Gracias.

  5. Avatar

    Diego 31 agosto. 2011 - 04:41

    Interesante tu post. Justo estoy buscando un Instituto donde enseñan este framework. Creo que haré el curso primero y luego compraré alguno de los libros que mencionaste.

    Saludos desde Perú.

    • Avatar

      Fernando 13 marzo. 2012 - 11:29

      No he vuelto a tocar Spring en mucho tiempo. He recorrido otros caminos tecnológicos, dentro de Java mismo incluso, pero no he retomado Spring.

      En algún momento con tiempo me gustaría volver e investigar un poco más cómo viene Spring y seguro postearé algo.

      ¡Saludos!

  6. Avatar

    Jorge Roselló Gautier 9 abril. 2012 - 08:59

    Buena introducción, la verdad es que es un Framework muy potente y sencillo. Quizás esa es la dificultad para las personas que llevan tiempo en java, aceptar la sencillez.

  7. Avatar

    John 31 mayo. 2012 - 20:54

    Buenas tardes, recien estoy aprendiendo spring y veo que maneja muchas cosasy es muy ordenado, voy segir aprendiendo mas ya que me esta llamando mucho la atencion de spring…

  8. Avatar

    maurocarrero 19 febrero. 2013 - 10:27

    Hola, veo que no estás trabajando en este momento con la herramienta. Supongo que es por razones eventuales. Si no es así, me gustaría saber qué es lo que te alejó del framework.

    Muchas gracias.
    M.

    • Avatar

      Fernando 19 febrero. 2013 - 23:32

      Hola, en verdad no estoy trabajando con Java en sí. Me he alejado bastante del lenguaje y vengo trabajando mucho con Ruby, JavaScript y otras tecnologías. Si tuviera que usar algo con la JVM/Java hoy, me pondría a estudiar Scala que me parece un lenguaje mucho más interesante y que no arrastra los años de Java. De Spring no tengo demasiado más para decir, solo que me aburría mucho usar xml 😛

      Con las anotaciones, creo que en Spring 3 llegaron, se hacía mas cómodo. Pero igual me parecía que forzaba mucho la inyección de dependencia, o mas bien que a veces se usaba en casos donde no era necesario, simplemente por usarlo.

Dejar un comentario

Toasty!