domingo, 12 de octubre de 2025

La magia de los frameworks: Spring Boot, parte I

 La magia de los frameworks: Spring Boot, parte I

                                           

    En esta entrada nos adentramos en el apasionante mundo de los frameworks y, concretamente en Spring Boot, el framework por excelencia de Java y uno de los más importantes e implantados en el backend a nivel empresarial. 

    Spring Boot es una extensión o evolución del framework base, Spring. Con Spring se tenían que configurar manualmente muchas cosas que se abstraen en Spring Boot, los ejemplos más típicos son el servidor y la configuración manual de un fichero .xml con los beans (componentes).

    En cambio, la evolución experimentada con Spring Boot desde el año 2014 permitió, entre muchas otras mejoras, tener un servidor embebido (por lo general Apache Tomcat) que se levanta al iniciar nuestro programa. 

    Otro de los grandes avances respecto a Spring radica en las configuraciones, ya que sólo necesitamos añadir las dependencias en su fichero correspondiente (por ejemplo Maven o Gradle) pero no tenemos que ir añadiendo a un fichero .xml los componentes o beans conforme los vayamos declarando, ya que esto se realiza automáticamente con anotaciones que empiezan por "@", como por ejemplo @Service, @Repository, @Component ó @Bean.


    Estas anotaciones son unas de las herramientas más potentes, sino la que más, de Spring Boot. 
Del mismo modo, gracias a Lombok (simplemente agregamos su dependencia en el fichero pom.xml del proyecto), apenas escribimos código a la hora de crear nuestras clases:


    Este ejemplo es muy representativo, ya que sencillamente con las anotaciones @Builder y @Data no es necesario escribir el código de Getters, Setters, constructor con argumentos requeridos ni el código para implementar el patrón builder. 

    Las anotaciones además pueden recibir parámetros para configurar exactamente cómo queremos que se comporte un componente. En este ejemplo, @Cacheable va a establecer una caché para los productos buscados por id, por lo que tras realizar la primera llamada a la base de datos, las llamadas sucesivas estarán en caché y tararán mucho menos:


    El ahorro de código repetitivo que supone todo lo anterior optimiza mucho el tiempo de desarrollo y el posterior proceso de testing, entre otras muchas ventajas. 

    Aquí se muestra un ejemplo del nivel de abstracción que supone Spring Boot, tenemos una interfaz para mapear (convertir) de Product a ProductEntity (la entidad de producto ó DAO (Data Access Object) proveniente de la base de datos) y viceversa. 

    Nosotros a la hora de mapear llamamos directamente a la interfaz, pero cuando el proyecto se compila para ejecutarse, Spring Boot genera la implementación (clase) correspondiente con sólo tener la anotación @Mapper en la interfaz: 




    Uno de los principios más importantes sobre los que se asienta Spring Boot es la inversión de control (IOC), ya que nosotros sólo declaramos las diferentes clases, componentes, servicios, y es Spring Boot quien los crea por nosotros. 

    Directamente derivado de IOC está la inyección de dependencias, la cual nos permite cómodamente incluir como atributos de una clase las dependencias que vayamos a necesitar, en este caso un controlador Rest, y gracias a la anotación "@RequiredArgsConstructor" por debajo nos crea un constructor con los atributos que sean final o NonNull. 

    Todo ello nos permite inyectar dependencias en otras clases o servicios, lo cual favorece el desacoplamiento, la adopción de arquitecturas óptimas (como la hexagonal) y el facilitamiento del testing. 


    Con la facilidad de uso y versatilidad de Spring Boot se puede desplegar una Api Rest en cuestión de minutos, gracias a todas las capas de abstracción que tiene y a la facilidad de uso, por lo que para el programador es muy cómodo trabajar y tener funcionando un proyecto rápidamente e ir ajustándolo según los requerimientos del software a crear. 

    Finalizo la entrada intentando recalcar la idea de la potencia y la profundidad de un framework, un ecosistema completo en el que no necesitamos herramientas externas o librerías, sino que todo lo que precisamos para trabajar ya lo tenemos integrado y disponible en un sólo marco de trabajo en nuestro editor ó IDE (en mi caso IntelliJ). 

    Próximamente tendremos la segunda parte, donde veremos otras partes o "paquetes" de Spring que se integran en Spring Boot.


No hay comentarios:

Publicar un comentario