Spring & Spring Boot ¿Son lo mismo?

No es de esconder que soy un defensor de Spring Boot desde que lo use por primera vez por el 2016, sin embargo el secreto de porque me gusta tanto este proyecto no es en sí por Spring Boot, sino por Spring Cloud, un conjunto de soluciones para la implementación de una arquitectura microservicios aplicando los patrones del mercado.

En este artículo sin embargo no iremos a Spring Cloud directamente, sino que hablaremos de Spring Boot y su relación con el proyecto Spring, quiero hacer esta entrada porque cada vez se vuelve mas recurrente con algunos amigos debatir sobre este tema y lo que aporta como mejoras Spring Boot.

Spring framework

Spring es probablemente sin deseos de ser absoluto el marco de trabajo Java más usado en el mercado del desarrollo de software, he realizado una visualización en Google Trends de algunos marcos de trabajo que se ejecutan sobre la JVM y los resultados así lo ilustran.

Interés en búsquedas de los principales frameworks JVM

Spring es un proyecto nacido en el 2003 que posee una arquitectura modular por paquetes que dispone de funciones para manejar diversas tecnologías, por ejemplo: acceso a datos con Hibernate, Spring Data (JPA, ElasticSearch, MongoDB, etc), manipulación de JSON con Jackson, manipulación de XML con JAXB, MVC, motores de plantillas como Thymeleaf, Spring AOP, SpEL y muchas otras, el equipo de Spring no reinventó en muchos casos cosas nuevas, sino que a partir de la arquitectura modular de la que se compone un aplicación Spring permite integraciones y así extender el funcionamiento del marco de trabajo.

La innovación de Spring, a mi entender personal ha estado asociada al manejo correcto del patrón de IoC (Inversión de Control) a través el contenedor de beans del framework, teniendo el framework el control de los objetos (beans) y facilitando la aplicación de un patrón tan importante asociado a la inversión de control que es la Inyección de dependencias con la popular anotación @Autowired.

Spring recientemente está en la versión 5.X que trajo como mayor innovación el soporte a la programación reactiva soportada por Netty. Permitiendo pasar del modelo tradicional de los contenedores de servlets como Jetty, Tomcat, Wildfly y otros a soportar el modelo reactivo, el cual ofrece un mejor aprovechamiento de la infraestructura. Actualmente Netty es parte de la mayoría de los contenedores de servlets, por lo que el despliegue de una aplicación reactiva con Spring está soportada en la mayoría de los mismos.

Spring Boot, un proyecto de Spring

En el 2012, siendo Spring un framework maduro con casi una década de evolución, en la página de Github del proyecto Spring se lanzó un issue bajo el texto: “Improved support for ‘containerless’ web application architectures [SPR-9888]“, con el objetivo de evitar tener que generar WARs de despliegue en servlet containers externos. Pueden encontrarse más detalles de este issue, este es el origen de Spring Boot.

Spring Boot, nace en el 2014 como un proyecto de Spring que implementa principalmente los problemas planteados en el issue mencionado.

Como principal diferencia con respecto a Spring, en Boot encontramos:

  • Implementa el concepto de containerless, incluyendo por defecto un servidor de aplicaciones embebido (tomcat por defecto).
  • Esta centrado en facilitar el proceso de inyección de configuración.
  • Implementa mejoras en la gestión de dependencias Java.

Podemos resumir la relación entre Spring & Spring Boot en una sola imagen, a continuación la muestro.

1 thought on “Spring & Spring Boot ¿Son lo mismo?

Comments are closed.