SpringBoot
Tutorial SpringBoot: Introducción a Spring Boot
Spring Boot introducción: primeros pasos. Aprende los conceptos básicos y da tus primeros pasos con Spring Boot con ejemplos detallados.
Aprende SpringBoot y certifícateQué es Spring Framework
Spring Framework es un marco de desarrollo de código abierto para la plataforma Java que proporciona una infraestructura completa para el desarrollo de aplicaciones empresariales.
Creado por Rod Johnson y lanzado inicialmente en 2003, Spring surgió como una alternativa a los modelos de programación empresarial complejos que existían en ese momento, especialmente como respuesta a la complejidad de J2EE (Java 2 Enterprise Edition).
La filosofía central de Spring se basa en la simplicidad, la testabilidad y el bajo acoplamiento. El framework se construyó sobre el principio de inversión de control (IoC), que cambia la forma tradicional en que el código obtiene sus dependencias. En lugar de que los componentes creen o busquen sus dependencias, estas son "inyectadas" por un contenedor externo, lo que se conoce como inyección de dependencias (DI).
Spring Framework se organiza en diferentes módulos que pueden utilizarse de forma independiente o combinada según las necesidades del proyecto. Entre los módulos fundamentales se encuentran:
- Spring Core: Proporciona la funcionalidad esencial del framework, incluyendo el contenedor IoC y el mecanismo de inyección de dependencias.
- Spring AOP: Implementa la programación orientada a aspectos, permitiendo definir comportamientos transversales (como logging, seguridad o transacciones) de manera separada del código principal.
- Spring JDBC: Ofrece una capa de abstracción sobre JDBC que simplifica el acceso a bases de datos relacionales y el manejo de excepciones.
- Spring ORM: Proporciona integración con frameworks de mapeo objeto-relacional como Hibernate, JPA o MyBatis.
- Spring Web: Incluye componentes para el desarrollo de aplicaciones web, como Spring MVC para la implementación del patrón Modelo-Vista-Controlador.
- Spring Test: Facilita la escritura de pruebas unitarias e integración para aplicaciones Spring.
La arquitectura en capas es un concepto fundamental en Spring. Se promueve la separación de responsabilidades mediante capas bien definidas:
┌─────────────────────────────┐
│ Capa de Presentación │ ← Controladores, vistas
├─────────────────────────────┤
│ Capa de Servicio │ ← Lógica de negocio
├─────────────────────────────┤
│ Capa de Acceso a │ ← Repositorios, DAOs
│ Datos │
└─────────────────────────────┘
Una de las ventajas principales de Spring es que no impone un modelo de programación específico. Se puede integrar gradualmente en aplicaciones existentes, y permite utilizar POJOs (Plain Old Java Objects) simples en lugar de requerir que las clases implementen interfaces específicas del framework.
Spring Framework también proporciona soporte transaccional declarativo, permitiendo gestionar transacciones mediante anotaciones como @Transactional
sin necesidad de código boilerplate para iniciar, confirmar o revertir transacciones.
El manejo de excepciones en Spring se simplifica mediante la conversión de excepciones específicas de tecnología (como SQLException) en excepciones más abstractas y significativas, lo que reduce el acoplamiento con tecnologías específicas.
Qué es Spring Boot y su evolución
Spring Boot es un proyecto dentro del ecosistema Spring que simplifica el desarrollo de aplicaciones basadas en Spring Framework. Lanzado en 2014, Spring Boot surgió como respuesta a la complejidad en la configuración y despliegue de aplicaciones Spring tradicionales.
La filosofía fundamental de Spring Boot se resume en su lema "opinionated defaults, graceful override" (configuraciones predeterminadas con opinión, anulación elegante). Esto significa que Spring Boot viene con configuraciones predeterminadas inteligentes basadas en las mejores prácticas, pero permite personalizarlas fácilmente cuando sea necesario.
Spring Boot introduce el concepto de aplicaciones autocontenidas que pueden ejecutarse de forma independiente, sin necesidad de servidores de aplicaciones externos. Esto se logra mediante la inclusión de un servidor embebido (como Tomcat, Jetty o Undertow) dentro del archivo JAR ejecutable de la aplicación.
La evolución de Spring Boot ha sido constante desde su lanzamiento inicial:
- Spring Boot 1.0 (2014): Primera versión estable que introdujo los conceptos fundamentales como la autoconfiguración y las aplicaciones autocontenidas.
- Spring Boot 1.5 (2017): Mejoró la integración con herramientas de monitorización y actuadores, además de refinar la experiencia del desarrollador.
- Spring Boot 2.0 (2018): Un hito importante que adoptó Spring Framework 5, con soporte para Java 8+ como requisito mínimo e incorporó programación reactiva con Spring WebFlux.
- Spring Boot 2.3 (2020): Introdujo características orientadas a contenedores y cloud-native, como la creación de imágenes Docker optimizadas y tiempos de inicio más rápidos.
- Spring Boot 2.7 (2022): Refinó la experiencia del desarrollador con mejoras en la configuración y el rendimiento.
- Spring Boot 3.0 (2022): Adoptó Jakarta EE en lugar de Java EE, requiere Java 17 como mínimo y se integra con Spring Framework 6, con mejoras en el rendimiento y la seguridad.
El sistema de autoconfiguración es un mecanismo que:
1. Detecta las dependencias presentes en el classpath
2. Configura automáticamente los componentes necesarios
3. Permite anular cualquier configuración automática cuando sea necesario
Por ejemplo, si se incluye la dependencia spring-boot-starter-data-jpa
en el proyecto, Spring Boot configurará automáticamente un DataSource
, un EntityManagerFactory
y un TransactionManager
sin necesidad de configuración adicional.
Los Spring Boot Starters son dependencias curadas que agrupan todas las bibliotecas necesarias para un propósito específico.
La configuración externalizada es otra característica clave. Spring Boot permite definir propiedades en varios lugares:
- Archivos
application.properties
oapplication.yml
- Variables de entorno
- Argumentos de línea de comandos
- Servicios de configuración centralizados
# application.yml
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost/midb
username: usuario
password: contraseña
Los actuadores de Spring Boot proporcionan endpoints HTTP o JMX para monitorizar y gestionar la aplicación en producción. Estos exponen información valiosa como:
- Estado de salud de la aplicación
- Métricas de rendimiento
- Información del entorno
- Gestión de logs
Spring Boot también ha evolucionado para adaptarse a las arquitecturas modernas:
- Microservicios: Con tamaño reducido y rápido inicio, las aplicaciones Spring Boot son ideales para arquitecturas de microservicios.
- Aplicaciones cloud-native: Integración nativa con plataformas como Kubernetes y herramientas como Spring Cloud.
- Aplicaciones reactivas: Soporte completo para programación reactiva con Spring WebFlux y Project Reactor.
El ecosistema alrededor de Spring Boot ha crecido con proyectos complementarios como:
- Spring Cloud: Para desarrollo de sistemas distribuidos
- Spring Security: Para seguridad y autenticación
- Spring Data: Para acceso simplificado a diferentes tipos de bases de datos
- Spring Batch: Para procesamiento por lotes
Qué diferencias hay entre Spring Framework y Spring Boot
Aunque Spring Boot está construido sobre Spring Framework, existen diferencias entre ambos que determinan cuándo y cómo utilizar cada uno.
Spring Framework requiere una configuración explícita y detallada, ya sea mediante XML, anotaciones o clases Java. Por ejemplo, para configurar una aplicación web MVC en Spring Framework tradicional se necesita:
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
// Múltiples métodos de configuración
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/views/", ".jsp");
}
// Más configuraciones...
}
En contraste, Spring Boot adopta el principio de "convención sobre configuración", proporcionando valores predeterminados inteligentes que funcionan inmediatamente. La misma configuración web se realiza automáticamente al incluir la dependencia spring-boot-starter-web
, sin código adicional.
La estructura del proyecto también difiere. En Spring Framework, se debe crear manualmente la estructura de directorios y configurar explícitamente componentes como el servidor web. Spring Boot, por su parte, proporciona una estructura de proyecto predefinida y servidores embebidos que simplifican el desarrollo.
El despliegue representa otra diferencia crucial. Las aplicaciones Spring Framework tradicionales generalmente se empaquetan como archivos WAR que deben desplegarse en servidores de aplicaciones externos como Tomcat o JBoss. Spring Boot, en cambio, permite crear aplicaciones autocontenidas con servidores embebidos:
// Aplicación Spring Boot lista para ejecutar
@SpringBootApplication
public class AplicacionEjemplo {
public static void main(String[] args) {
SpringApplication.run(AplicacionEjemplo.class, args);
}
}
Esta aplicación puede ejecutarse con un simple comando java -jar
sin infraestructura adicional.
La gestión de dependencias se aborda de manera diferente en ambos frameworks. Spring Framework requiere que el desarrollador identifique y gestione manualmente todas las dependencias necesarias, asegurando la compatibilidad entre versiones. Spring Boot introduce el concepto de "starters", que son dependencias curadas que agrupan bibliotecas compatibles para casos de uso específicos:
<!-- Un único starter que incluye múltiples dependencias compatibles -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Este starter incluye automáticamente Hibernate, Spring Data JPA, HikariCP y otras bibliotecas necesarias, todas en versiones compatibles entre sí.
La autoconfiguración es una característica exclusiva de Spring Boot que no existe en Spring Framework. Mientras que en Spring Framework cada componente debe configurarse explícitamente, Spring Boot analiza el classpath y configura automáticamente los componentes basándose en las dependencias presentes:
# Configuración mínima en application.properties para una base de datos
spring.datasource.url=jdbc:mysql://localhost/midb
spring.datasource.username=usuario
spring.datasource.password=clave
Con estas propiedades, Spring Boot configura automáticamente el DataSource, EntityManagerFactory, TransactionManager y otros componentes relacionados.
Las herramientas de desarrollo también difieren. Spring Boot proporciona características integradas como:
- DevTools: Reinicio automático durante el desarrollo
- Actuators: Endpoints para monitorización y gestión
- Spring Boot CLI: Herramienta de línea de comandos para prototipado rápido
Estas herramientas no están disponibles en Spring Framework sin configuración adicional.
Spring Framework tiene una curva de aprendizaje más pronunciada debido a su naturaleza modular y la necesidad de comprender cómo integrar diferentes componentes. Spring Boot simplifica este proceso con configuraciones predeterminadas y documentación orientada a casos de uso específicos.
En cuanto a flexibilidad vs conveniencia, Spring Framework ofrece mayor flexibilidad y control sobre cada aspecto de la aplicación, pero requiere más conocimiento y esfuerzo. Spring Boot prioriza la conveniencia y la productividad, aunque puede resultar más difícil personalizar ciertos aspectos muy específicos.
El rendimiento inicial también varía. Las aplicaciones Spring Boot pueden tener un tiempo de arranque ligeramente mayor debido a la autoconfiguración y el escaneo de componentes, aunque las versiones recientes han mejorado en este aspecto.
La integración con microservicios es otra área de diferencia. Spring Boot está optimizado para el desarrollo de microservicios con su enfoque en aplicaciones autocontenidas, mientras que Spring Framework requiere configuración adicional para adaptarse a este paradigma.
En términos de producción y operaciones, Spring Boot incluye características integradas para entornos productivos:
- Métricas y monitorización a través de Actuators
- Configuración externalizada para diferentes entornos
- Soporte para contenedores y plataformas cloud
Estas características deben implementarse manualmente en aplicaciones Spring Framework tradicionales.
La siguiente tabla resume las principales diferencias:
Aspecto | Spring Framework | Spring Boot |
---|---|---|
Configuración | Explícita y detallada | Automática con valores predeterminados |
Despliegue | WAR en servidores externos | JAR autocontenido con servidor embebido |
Dependencias | Gestión manual | Starters predefinidos |
Desarrollo | Más control, más código | Mayor productividad, menos código |
Casos de uso | Aplicaciones con requisitos específicos | Desarrollo rápido, microservicios |
Spring Boot no reemplaza a Spring Framework, sino que lo complementa. Spring Boot utiliza Spring Framework como su base, simplificando su uso pero manteniendo toda su potencia. La elección entre uno u otro dependerá de los requisitos específicos del proyecto, las restricciones técnicas y las preferencias del equipo de desarrollo.
Otros ejercicios de programación de SpringBoot
Evalúa tus conocimientos de esta lección Introducción a Spring Boot con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Crear entidades JPA
Controladores Spring MVC
Asociaciones de entidades JPA
Crear entidad Asignatura
Consultas JPQL
Servicios en Spring
Relación ManyToOne con Tarea y Proyecto
CRUD Customers Spring MVC + Spring Data JPA
Backend API REST con Spring Boot
Controladores Spring REST
Inyección de dependencias
Entidad y repositorio
Métodos derivados y consultas JPQL en repositorios
Todas las lecciones de SpringBoot
Accede a todas las lecciones de SpringBoot y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción A Spring Boot
Introducción Y Entorno
Spring Boot Starters
Introducción Y Entorno
Inyección De Dependencias
Introducción Y Entorno
Controladores Spring Mvc
Spring Mvc Con Thymeleaf
Vista En Spring Mvc Con Thymeleaf
Spring Mvc Con Thymeleaf
Controladores Spring Rest
Spring Mvc Con Thymeleaf
Open Api Y Cómo Agregarlo En Spring Boot
Spring Mvc Con Thymeleaf
Servicios En Spring
Spring Mvc Con Thymeleaf
Clientes Resttemplate Y Restclient
Spring Mvc Con Thymeleaf
Rxjava En Spring Web
Spring Mvc Con Thymeleaf
Crear Entidades Jpa
Spring Data Jpa
Asociaciones De Entidades Jpa
Spring Data Jpa
Repositorios Spring Data
Spring Data Jpa
Métodos Find En Repositorios
Spring Data Jpa
Inserción De Datos
Spring Data Jpa
Actualizar Datos De Base De Datos
Spring Data Jpa
Borrar Datos De Base De Datos
Spring Data Jpa
Consultas Jpql Con @Query En Spring Data Jpa
Spring Data Jpa
Api Query By Example (Qbe)
Spring Data Jpa
Api Specification
Spring Data Jpa
Repositorios Reactivos
Spring Data Jpa
Testing Unitario De Componentes Y Servicios
Testing Con Spring Test
Testing De Repositorios Spring Data Jpa
Testing Con Spring Test
Testing Controladores Spring Mvc Con Thymeleaf
Testing Con Spring Test
Testing Controladores Rest Con Json
Testing Con Spring Test
Testing De Aplicaciones Reactivas Webflux
Testing Con Spring Test
Testing De Seguridad Spring Security
Testing Con Spring Test
Testing Con Apache Kafka
Testing Con Spring Test
Introducción A Spring Security
Seguridad Con Spring Security
Seguridad Basada En Formulario En Mvc Con Thymeleaf
Seguridad Con Spring Security
Registro De Usuarios
Seguridad Con Spring Security
Login De Usuarios
Seguridad Con Spring Security
Verificar Token Jwt En Peticiones
Seguridad Con Spring Security
Seguridad Jwt En Api Rest Spring Web
Seguridad Con Spring Security
Seguridad Jwt En Api Rest Reactiva Spring Webflux
Seguridad Con Spring Security
Autenticación Y Autorización Con Anotaciones
Seguridad Con Spring Security
Introducción A Spring Webflux
Reactividad Webflux
Spring Data R2dbc
Reactividad Webflux
Controlador Rest Reactivo Basado En Anotaciones
Reactividad Webflux
Controlador Rest Reactivo Funcional
Reactividad Webflux
Operadores Reactivos Básicos
Reactividad Webflux
Operadores Reactivos Avanzados
Reactividad Webflux
Cliente Reactivo Webclient
Reactividad Webflux
Introducción E Instalación De Apache Kafka
Mensajería Asíncrona
Crear Proyecto Con Apache Kafka
Mensajería Asíncrona
Creación De Producers
Mensajería Asíncrona
Creación De Consumers
Mensajería Asíncrona
Kafka Streams En Spring Boot
Mensajería Asíncrona
Integración Con Angular
Integración Frontend
Integración Con React
Integración Frontend
Integración Con Vue
Integración Frontend
En esta lección
Objetivos de aprendizaje de esta lección
- Comprender el concepto y beneficios de la inversión de control (IoC).
- Identificar los módulos principales de Spring y su funcionalidad.
- Diferenciar entre configuración de Spring tradicional y Spring Boot.
- Entender las capacidades de autoconfiguración de Spring Boot.
- Analizar las diferencias entre Spring Framework y Spring Boot.
- Aplicar estrategias de configuración y gestión de dependencias.
- Evaluar el uso de Spring en entornos de microservicios y cloud-native.