¿Qué es Spring Boot?

Spring Boot es parte del famosísimo framework Java, Spring, en versión reducida, para agilizar el desarrollo de aplicaciones web pero ofreciendo la mayoría de las librerías importantes de Spring, y sin necesidad de hacer mucha configuración.

La base de Spring son los Beans o también llamados Servicios para ejecutar la lógica de la aplicación. Que no son más que clases de las que Spring conoce de su existencia.

Para que los clientes web puedan comunicarse con estos servicios, se utilizan lo que se denominan Controladores (Controllers), que procesan los requests de los clientes y generan sus respuestas.

Cuando se trata de conectarnos a la base de datos tenemos dos opciones, o bien hacerlo directamente usando una librería JDBC (si programaste para Windows su equivalente sería ODBC) que nos permite ejecutar queries directamente sobre la base de datos, o utilizar lo que se conoce como herramientas de mapeo objeto-relacional (ORM), que básicamente convierte los datos de la base de datos en objetos, mapea tus clases con la base de datos, lo que simplifica la carga y guardado de datos.

Java ofrece una solución ORM llamada Java Persistence API (JPA) como solución ORM, y Spring Boot librerías muy completas y famosas que implementan esta interfaz, como pueden ser Hibernate o MyBatis.

Spring Boot es ideal para modelar soluciones web con arquitectura en capas, pero también para arquitecturas micro-servicios.

Características de Spring Boot

Spring Boot tiene el núcleo de Spring, el cual se encarga de funciones tan características de este Framework como:

Inversion de Control (IoC)

La Inversión de Control es una de las principales características de Spring, la cual le permite manejar instancias de dependencias y proporcionarlas cuando sea necesario. Es más sencillo de lo que parece.

Digamos que la clase A (por ejemplo, una clase Usuario) tiene una dependencia de la clase B (por ejemplo una clase Database). Entonces la clase A tendrá que inicializar la clase B dentro de ella para poder utilizarla.

Lo que sugiere la Inversión de Control, es justo eso, que la relación entre dependencias debería invertirse. Es decir, que los objetos no creen los objetos de los que dependen, sino que los obtengan de fuentes externas, en nuestro caso de Spring, que se encargará de inicializar esos objetos y pasarlos como parámetros. Esto sin duda proporciona una arquitectura débilmente acoplada, y facilita las pruebas unitarias.

Esto nos lleva al siguiente punto fuerte de Spring Boot.

Inyección de Dependencias

La inyección de dependencia es un patrón de diseño para construir aplicaciones con poco acoplamiento, y básicamente significa pasar un objeto dependiente a un método como parámetro en vez de que el método cree el objeto, así el método no tiene una dependencia directa con ese objeto.

Un punto muy importante de este patrón es el principio de Inversión de Dependencia que dice que debemos contar con abstracciones en lugar de implementaciones concretas, que puede ser o bien un interfaz o una clase abstracta lo que inyectemos.

Java Application Servers

Una aplicación desarrollada con este framework debe ser desplegada en un Servidor de Aplicaciones Java. Existen muchos y diversos como GlassFish, Tomcat, Netty o WildFly, entre otros muchos más. Spring Boot incorpora su propio Tomcat por defecto, aunque por supuesto puede ser reemplazado.

La manera de conectar nuestra aplicación con el servidor de aplicaciones es a través de los Servlets. Cada Servlet corresponde a un nuevo endpoint.

Contamos con un fichero especifico (web.xml) para la especificación de nuestros Servlets.

Con ese fichero el Servidor de Aplicaciones se encarga de inicializar y disponer esos servlets. Lo hace a través de tres métodos: init, service (el único que es llamado varias veces) y destroy. Todos estos servlets (objetos) se mantienen cargados en memoria mientras el Servidor de Aplicaciones este en funcionamiento.

Cada servlet que creemos debe tener como mínimo un método "service()" que encapsule la lógica del propio server para con el cliente. Opcionalmente se podrán implementar init() y destroy().

Herramientas que se integran con Spring Boot

La primera de la lista y fundamental es Spring Initializr https://start.spring.io/, que nos permite crear el esqueleto de nuestra aplicación incorporando las referencias de las librerías que deseemos.

Otra de las imprescindibles es Maven, que es un sistema de gestión de dependencia (lo que sería composer para php). El fichero que usa maven es pom.xml. Comentar que una alternativa a Maven es Gradle.

Entre las dependencias más útiles está Spring Boot DevTools que nos permite reiniciar aplicaciones rápidamente, LiveReload y distintas configuraciones para facilitar el desarrollo. Pero hay otras muchas que ofrecen grandes funcionalidades: hot reloading, patrones de acceso a base de datos, acceso a plataformas en la nube, etc.

Para los test automatizados de usuario (Automated User Testing), es decir la simulación de un usuario en la web disponemos de Selenium.

Comentarios

Entradas populares de este blog

Envío de checkboxes o selector multiple por AJAX con jQuery

Patrones de Diseño Creacionales

Conceptos básicos de la POO