En 2002, en su libro “Expert One-on-One J2EE Design and De­ve­lo­p­me­nt”, el de­sa­rro­lla­dor au­s­tra­liano Rod Johnson presentó el código del framework de Java Interface 21 que había escrito es­pe­cí­fi­ca­me­n­te para sus propios proyectos. Sobre la base de este código, Johnson de­sa­rro­lló, junto con otros pro­gra­ma­do­res, el framework Spring, que saldría al mercado por primera vez bajo la licencia libre Apache 2.0 y, hasta la fecha, es una de las so­lu­cio­nes más populares para el de­sa­rro­llo de apli­ca­cio­nes em­pre­sa­ria­les en Java. Así, este framework de código abierto co­n­tra­rre­s­ta las de­bi­li­da­des y li­mi­ta­cio­nes del entorno de de­sa­rro­llo estándar J2EE (hoy conocido también como “Java Plattform”) y el modelo de co­m­po­ne­n­tes En­te­r­pri­se JavaBeans (EJB), re­du­cie­n­do si­g­ni­fi­ca­ti­va­me­n­te su co­m­ple­ji­dad.

¿Qué es Spring?

Spring Framework si­m­pli­fi­ca el de­sa­rro­llo de apli­ca­cio­nes Java, in­de­pe­n­die­n­te­me­n­te de si se trata de apli­ca­cio­nes web or­di­na­rias o sin conexión web. Sus mayores ventajas son un código fuente más si­m­pli­fi­ca­do y una menor di­fi­cu­l­tad en los ajustes. Con el fin de ofrecer al pro­gra­ma­dor dichas co­mo­di­da­des, el framework se basa en los si­guie­n­tes pri­n­ci­pios, como explica Rod Johnson en su libro:

  • De­pe­n­de­n­cy Injection (DI): en el contexto de la pro­gra­ma­ción orientada a objetos, la inyección de de­pe­n­de­n­cias es un organismo externo que regula de antemano las de­pe­n­de­n­cias de los objetos. Para este fin, Spring Framework utiliza los co­m­po­ne­n­tes JavaBeans. Entre otras cosas, estos actúan en Java como un co­n­te­ne­dor para la tra­n­s­mi­sión de datos, por lo que, en Spring, se utilizan como una plantilla para todos los recursos ge­s­tio­na­dos (“beans”).
  • Pro­gra­ma­ción orientada a aspectos (AOP): op­cio­na­l­me­n­te, con el fin de aumentar la mo­du­la­ri­dad de las apli­ca­cio­nes orie­n­ta­das a objetos, Spring pro­po­r­cio­na un enfoque de pro­gra­ma­ción orientada a aspectos con el lenguaje AspectJ. Con esto, es posible es­tru­c­tu­rar si­n­té­ti­ca­me­n­te los aspectos, esto es, aquellos elementos tra­n­s­ve­r­sa­les in­e­vi­ta­bles en sistemas complejos. Esto tiene la ventaja de que el código del programa se separa de procesos técnicos como solución de errores, va­li­da­ción o seguridad.
  • Pla­n­ti­llas: en Spring, las pla­n­ti­llas son clases para di­fe­re­n­tes in­te­r­fa­ces de programa que si­m­pli­fi­can el trabajo con API pro­po­r­cio­na­n­do la gestión au­to­má­ti­ca de recursos, el tra­ta­mie­n­to uniforme de errores y otras fa­ci­li­da­des de asi­s­te­n­cia técnica.

El hecho de que se cumplan los pri­n­ci­pios an­te­rio­r­me­n­te me­n­cio­na­dos es lo que permite a Spring Framework recurrir a los objetos POJO (Plain Old Java Objects) para el de­sa­rro­llo de apli­ca­cio­nes Java En­te­r­pri­se. A di­fe­re­n­cia del proyecto En­te­r­pri­se JavaBeans (EJB), estos objetos se ejecutan en casi cualquier entorno y, por lo tanto, no necesitan un servidor de apli­ca­cio­nes es­pe­cí­fi­co que soporte al co­n­te­ne­dor EJB -so­lu­cio­nes como Tomcat resultan pe­r­fe­c­ta­me­n­te adecuadas. Para poder utilizar Spring, se requiere el Java SE De­ve­lo­p­me­nt Kit (SDK).

In­tro­du­c­ción a los pri­n­ci­pa­les módulos de Spring Framework

Gracias a su es­tru­c­tu­ra modular para el de­sa­rro­llo de las más diversas apli­ca­cio­nes en Java, Spring resulta la elección perfecta. Con Spring, los de­sa­rro­lla­do­res tienen a su di­s­po­si­ción alrededor de 20 módulos y, además, pueden elegir li­bre­me­n­te cuáles de los co­m­po­ne­n­tes utilizar para sus apli­ca­cio­nes y cuáles no. En la ar­qui­te­c­tu­ra estándar, los di­fe­re­n­tes módulos se dividen en seis ca­te­go­rías pri­n­ci­pa­les:

  • Core Container: el co­n­te­ne­dor núcleo pro­po­r­cio­na los módulos básicos: spring-core, spring-beans, spring-context, spring-context-support y spring-ex­pre­s­sion. Con esto, Core y Beans forman la columna vertebral del framework, co­n­te­nie­n­do la función de inyección de de­pe­n­de­n­cia y so­po­r­ta­n­do los objetos POJO, por ejemplo. El módulo Context hereda sus ca­ra­c­te­rí­s­ti­cas del módulo Beans y puede co­m­ple­me­n­tar­las con funciones para la in­te­r­na­li­za­ción o para la carga de recursos. Adi­cio­na­l­me­n­te, es co­m­pa­ti­ble con funciones de Java En­te­r­pri­se como EJB y JMX (Java Ma­na­ge­me­nt Ex­te­n­sio­ns). Context-support facilita la in­te­gra­ción de bi­blio­te­cas de otros pro­vee­do­res en Spring. Spring-ex­pre­s­sion contiene el Spring Ex­pre­s­sion Language (SPeL), una extensión del Unified Ex­pre­s­sion Language de la es­pe­ci­fi­ca­ción JSP-2.1 (Java Server Pages).
  • AOP e in­s­tru­me­n­ta­ción: para habilitar la pro­gra­ma­ción orientada a aspectos, el Spring Framework contiene el módulo spring-aop, así como el módulo spring-aspects para la in­te­gra­ción del an­te­rio­r­me­n­te me­n­cio­na­do lenguaje AspectJ. El co­m­po­ne­n­te spring-in­s­tru­me­nt permite in­s­tru­me­n­ta­li­zar clases Java, es decir, cambiar el tiempo de ejecución del código de bytes y añadir im­ple­me­n­ta­cio­nes de Cla­s­s­Loa­der para di­fe­re­n­tes se­r­vi­do­res de apli­ca­cio­nes.
  • Me­n­sa­je­ría: para servir como base a las apli­ca­cio­nes basadas en mensajes, Spring Framework cuenta con algunas de las funciones de en­cri­p­ta­ción del proyecto Spring In­te­gra­tion como, por ejemplo, “Message”, “Me­s­sa­ge­Cha­n­nel” o “Me­s­sa­geHa­n­d­ler”. Dicho módulo tiene el nombre de spring-messaging.
  • Data Access/In­te­gra­tion: los módulos de esta categoría están diseñados para ofrecer a las apli­ca­cio­nes Java los in­s­tru­me­n­tos ne­ce­sa­rios para que in­ter­ac­túen con otras apli­ca­cio­nes, así como para controlar el acceso a los datos. Por ejemplo, el módulo spring-jdbc pone a di­s­po­si­ción una capa de ab­s­tra­c­ción que define la manera en la que un cliente accede a la base de datos y ahorra la co­m­pli­ca­da co­di­fi­ca­ción típica de JDBC. Por su parte, spring-orm ofrece capas de in­te­gra­ción para acceder a bases de datos re­la­cio­na­les en las populares in­te­r­fa­ces ORM. Otros co­m­po­ne­n­tes son spring-tx (soporta la gestión pro­gra­má­ti­ca de tra­n­sac­cio­nes para todas las clases y POJO), spring-oxm (capa de ab­s­tra­c­ción para el mapeo de objetos o de XML) y spring-jms, un módulo con ca­ra­c­te­rí­s­ti­cas para la pro­du­c­ción y el pro­ce­sa­mie­n­to de mensajes. 
  • Web: en esta categoría se en­cue­n­tran los módulos es­pe­cí­fi­cos para las apli­ca­cio­nes web: spring-web, spring-webmvc y spring-websocket. Adi­cio­na­l­me­n­te, esta apli­ca­ción de Java ha añadido las funciones típicas de in­te­gra­ción orientada a la web como una función de carga para datos múltiples (multipart) o un cliente HTTP. El módulo spring-webmvc también se conoce como web servlet y es quien contiene las im­ple­me­n­ta­cio­nes de Spring para la ejecución del patrón de ar­qui­te­c­tu­ra modelo-vista-co­n­tro­la­dor (MVC) y de los servicios web REST.
  • Test: el módulo spring-test permite comprobar la fu­n­cio­na­li­dad de los co­m­po­ne­n­tes de tu apli­ca­ción Java. Así, con la ayuda de fra­me­wo­r­ks adi­cio­na­les como JUnit o TestNG, puedes realizar pruebas unitarias o unit tests (ce­n­trá­n­do­te en un solo co­m­po­ne­n­te) así como pruebas de in­te­gra­ción.

Spring: Java para el de­sa­rro­llo web moderno

Desde sus inicios, Java, así como sus te­c­no­lo­gías re­la­cio­na­das, fue concebido para su im­ple­me­n­ta­ción en el de­sa­rro­llo web. A pesar de las di­fi­cu­l­ta­des iniciales a las que se enfrentó, entre ellas la escasa co­m­pa­ti­bi­li­dad con los na­ve­ga­do­res más antiguos, la in­su­fi­cie­n­te velocidad de banda ancha de las co­ne­xio­nes privadas y la impericia de la potencia de cálculo de los antiguos or­de­na­do­res, este lenguaje de pro­gra­ma­ción logró florecer a finales de los años 90. En los primeros días de la World Wide Web, los applets de Java gozaban de gran po­pu­la­ri­dad. Los applets son apli­ca­cio­nes escritas en Java que se ejecutan en el navegador uti­li­za­n­do entornos de tiempo de ejecución adecuados y que pueden in­ter­ac­tuar con el usuario sin tener que enviar datos al navegador. Sin embargo, debido a sus in­te­n­si­vas demandas de recursos, estas no re­su­l­ta­ban siempre muy prácticas. Con el auge de los di­s­po­si­ti­vos móviles, que no soportan los applets de los na­ve­ga­do­res, los elementos web in­ter­ac­ti­vos han des­apa­re­ci­do co­m­ple­ta­me­n­te de la escena.

Mientras que Java demostró re­la­ti­va­me­n­te pronto ser un fracaso en el frontend, este lenguaje de pro­gra­ma­ción se ha co­n­ve­r­ti­do en un elemento de gran im­po­r­ta­n­cia en el lado del servidor, siendo sus es­ce­na­rios de apli­ca­ción muy di­fe­re­n­tes. Desde servlets, los equi­va­le­n­tes a los applets en el servidor, hasta complejas so­lu­cio­nes em­pre­sa­ria­les como mi­d­d­le­wa­re, software bancario o sistemas de gestión de co­n­te­ni­dos, hoy en día, y siempre y cuando lo permita el pre­su­pue­s­to, Java y sus te­c­no­lo­gías son más de­ma­n­da­das que nunca. Por otro lado, debido a sus ventajas en términos de costes y tiempo, el lenguaje de pro­gra­ma­ción PHP es utilizado para alrededor de las tres cuartas partes de la totalidad de webs del mundo. Sin embargo, para aquellos de­sa­rro­lla­do­res web que aún trabajan con Java, Spring es un framework que pro­po­r­cio­na las es­tru­c­tu­ras ne­ce­sa­rias y si­m­pli­fi­ca co­n­si­de­ra­ble­me­n­te el proceso de trabajo. Las ventajas de las apli­ca­cio­nes web Java son, entre otras, su in­de­pe­n­de­n­cia de pla­ta­fo­r­ma y su capacidad de in­te­gra­ción con el software y los procesos co­r­po­ra­ti­vos, así como su es­tru­c­tu­ra clara.

¿Para qué tipo de proyectos es idóneo Spring Framework?

Spring es re­co­no­ci­do como un framework ligero para apli­ca­cio­nes Java, ya que no es necesario modificar casi ninguna parte del código fuente para be­ne­fi­ciar­se de sus numerosas ventajas. Entre otras cosas, Spring re­pre­se­n­ta una opción de si­m­pli­fi­ca­ción en cuanto a la gestión de tra­n­sac­cio­nes, in­te­r­fa­ces y al acceso a la base de datos. La facilidad para realizar pruebas unitarias y de in­te­gra­ción es una de las razones por las que este framework goza de gran po­pu­la­ri­dad. Sin embargo, el punto central es, sin duda, la renuncia a co­m­po­ne­n­tes es­pe­cí­fi­cos de la pla­ta­fo­r­ma y no estándar, que convierte a Spring en portátil e in­de­pe­n­die­n­te de los se­r­vi­do­res de apli­ca­cio­nes en gran medida. Por esta razón, se puede utilizar si­m­ple­me­n­te como un me­ta­fra­me­wo­rk en el que se pueden integrar otros fra­me­wo­r­ks o co­m­po­ne­n­tes externos. Un ejemplo de apli­ca­ción típico es el de­sa­rro­llo de un backend sobre la base de Spring, para asociarlo a un frontend creado con un framework UI como Twitter Bootstrap. Spring es una solución co­m­pe­te­n­te, es­pe­cia­l­me­n­te para la im­ple­me­n­ta­ción de apli­ca­cio­nes Business complejas. Para las empresas, este entorno de trabajo es, desde hace años y como Java, una excelente solución para aplicar las te­c­no­lo­gías ne­ce­sa­rias. A di­fe­re­n­cia de los fra­me­wo­r­ks web más simples, como el co­m­pe­ti­dor proyecto Apache Struts, el uso de Spring no se restringe a apli­ca­cio­nes web, sino que también permite el de­sa­rro­llo de so­lu­cio­nes de es­cri­to­rio nativas. Para apli­ca­cio­nes simples, ya sean online u offline, Spring (y Java) resultan menos adecuadas, incluso cuando es posible la rea­li­za­ción de este tipo de productos.

Las ventajas de Spring de un vistazo

Si estás a punto de comenzar con el de­sa­rro­llo de tu próximo gran proyecto y buscas un framework adecuado, deberás co­n­si­de­rar Spring como opción, en pa­r­ti­cu­lar, si Java es parte de tu re­pe­r­to­rio, pues, gracias a su gran colección de módulos flexibles, este entorno de trabajo si­m­pli­fi­ca el trabajo en gran medida. Así, obtendrás una es­tru­c­tu­ra base de alto re­n­di­mie­n­to que no necesita mo­di­fi­car­se demasiado y, de esta forma, podrás co­n­ce­n­trar­te en el de­sa­rro­llo de la lógica de tu negocio. Puedes descargar y probar el framework desde su re­po­si­to­rio oficial en GitHub en cualquier momento.

  • Lógica aplicable con POJO
  • Código base listo que requiere pocos (o ningún) cambio
  • No se necesita un servidor de apli­ca­cio­nes
  • Permite pruebas unitarias y de in­te­gra­ción
  • Ar­qui­te­c­tu­ra MVC
  • La pro­gra­ma­ción orientada a objetos es posible con AspectJ
  • Inyección de de­pe­n­de­n­cia (re­gu­la­ción de la de­pe­n­de­n­cia externa)
  • Gestión pro­gra­má­ti­ca de tra­n­sac­cio­nes
Ir al menú principal