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:
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.
No hay comentarios:
Publicar un comentario