JAVA Spring I (Spring Core + Boot)

Spring Core
Spring es un framework de desarrollo para Java que facilita la creación de aplicaciones robustas, escalables y mantenibles. Su principal objetivo es simplificar el desarrollo mediante características como la Inversión de Control (IoC) y la Inyección de Dependencias (DI), que permiten gestionar objetos y sus relaciones de manera eficiente. Spring también ofrece módulos para diversas necesidades, como acceso a datos, seguridad, desarrollo web y más.
Inyección de Dependencias
La Inyección de Dependencias (DI) es un patrón de diseño que delega la responsabilidad de crear e inyectar las dependencias de un objeto al contenedor IoC de Spring. Esto permite desacoplar los componentes de una aplicación, mejorando su flexibilidad y testabilidad. Por ejemplo, en lugar de que un objeto cree sus dependencias, estas son proporcionadas automáticamente por Spring.
Gestión de los Beans con Spring
Un bean en Spring es un objeto que el contenedor IoC gestiona, instancia y configura. Los beans representan los componentes principales de una aplicación y se definen en configuraciones XML, anotaciones o clases Java. Spring se encarga de gestionar su ciclo de vida y sus dependencias .
Factorías de Spring
Las factorías de Spring son métodos o clases que se utilizan para crear y configurar beans. Estas pueden ser factorías estáticas o de instancia, y permiten personalizar la creación de objetos según las necesidades específicas de la aplicación.
Ciclo de vida de un bean con Spring
El ciclo de vida de un bean en Spring incluye varias etapas: creación, inicialización, uso y destrucción. Spring permite personalizar este ciclo mediante métodos como @PostConstruct
y @PreDestroy
, o implementando interfaces como InitializingBean
y DisposableBean.
Alcance de un bean gestionado por Spring
El alcance (scope) de un bean define su ciclo de vida dentro del contenedor IoC. Spring soporta varios tipos de alcance, como:
- Singleton: Un único bean por contenedor IoC.
- Prototype: Se crea una nueva instancia cada vez que se solicita.
- Request: Un bean por solicitud HTTP.
- Session: Un bean por sesión HTTP. Estos alcances permiten adaptar el comportamiento de los beans a diferentes contextos de la aplicación
Herencia entre beans
Spring permite que los beans hereden propiedades y configuraciones de otros beans. Esto se logra mediante la configuración en XML o anotaciones, lo que facilita la reutilización de configuraciones comunes y reduce la redundancia.
Autowiring
El autowiring es una característica de Spring que permite inyectar automáticamente dependencias en un bean sin necesidad de configurarlas explícitamente. Esto se logra mediante anotaciones como @Autowired
, @Qualifier
o @Primary
, que indican al contenedor IoC cómo resolver las dependencias.
Ficheros de propiedades y gestión desde Spring
Spring permite gestionar configuraciones externas mediante ficheros de propiedades (.properties
o .yaml
). Estos archivos se utilizan para almacenar valores como URLs, credenciales o configuraciones específicas. Spring los carga mediante anotaciones como @PropertySource
y permite acceder a sus valores con @Value
o Environment
.
Mapeos
Los mapeos en Spring se utilizan para asociar rutas HTTP con métodos de controladores en aplicaciones web. Esto se logra mediante anotaciones como @RequestMapping
, @GetMapping
, @PostMapping
, entre otras. Los mapeos son esenciales para desarrollar APIs REST y aplicaciones web con Spring MVC.
Spring AOP
La Programación Orientada a Aspectos (AOP) en Spring permite separar preocupaciones transversales, como logging, seguridad o manejo de transacciones, del código principal de la aplicación. Esto se logra mediante aspectos (@Aspect
) que definen puntos de corte (pointcuts
) y acciones (advices
) que se ejecutan antes, después o alrededor de métodos específicos.
Spring Boot
Spring Boot es una extensión del framework Spring diseñada para simplificar el desarrollo de aplicaciones Java. Su objetivo principal es reducir la configuración manual y proporcionar un entorno listo para usar, con configuraciones predeterminadas que permiten a los desarrolladores centrarse en la lógica de negocio en lugar de en la infraestructura. Spring Boot incluye herramientas como Starters, AutoConfiguración y Actuator, que facilitan la creación de aplicaciones robustas y escalables.
CLI (Command Line Interface)
El Spring Boot CLI es una herramienta de línea de comandos que permite a los desarrolladores crear y ejecutar aplicaciones Spring Boot rápidamente. Con el CLI, se pueden escribir aplicaciones en Groovy, un lenguaje más conciso que Java, lo que acelera el desarrollo. Además, el CLI incluye comandos para inicializar proyectos, gestionar dependencias y ejecutar aplicaciones sin necesidad de configuraciones complejas.
Starters
Los Starters son dependencias preconfiguradas que simplifican la inclusión de funcionalidades específicas en una aplicación Spring Boot. Por ejemplo, si necesitas integrar JPA o crear una API REST, puedes agregar el correspondiente Starter (spring-boot-starter-data-jpa
o spring-boot-starter-web
) y Spring Boot configurará automáticamente las dependencias necesarias. Esto elimina la necesidad de configurar manualmente bibliotecas y reduce el tiempo de desarrollo
AutoConfigurator
La AutoConfiguración es una característica clave de Spring Boot que configura automáticamente los componentes de la aplicación en función de las dependencias presentes en el proyecto. Por ejemplo, si detecta que tienes una base de datos en tu aplicación, Spring Boot configurará automáticamente un DataSource
. Esto permite a los desarrolladores trabajar con configuraciones predeterminadas y personalizarlas solo cuando sea necesario.
Actuator
Spring Boot Actuator es un módulo que proporciona herramientas para monitorizar y gestionar aplicaciones en producción. Incluye una serie de endpoints HTTP (como /health
o /metrics
) que permiten supervisar el estado de la aplicación, recopilar métricas, analizar el rendimiento y realizar diagnósticos. Por defecto, algunos endpoints están habilitados, pero se pueden personalizar según las necesidades del proyecto
Initializr
Spring Initializr es una herramienta web que permite generar rápidamente proyectos Spring Boot con las dependencias necesarias. Los desarrolladores pueden seleccionar el tipo de proyecto, el lenguaje, la versión de Spring Boot y las dependencias requeridas, y luego descargar un proyecto listo para usar. Esto acelera el proceso de configuración inicial y permite comenzar a desarrollar de inmediato.
Configuración
Spring Boot simplifica la configuración de aplicaciones mediante el uso de propiedades predeterminadas y archivos de configuración (application.properties
o application.yml
). Además, permite gestionar configuraciones externas y perfiles (como dev
, test
o prod
) para adaptar la aplicación a diferentes entornos. También soporta la inyección de valores de configuración directamente en los componentes mediante anotaciones como @Value
o el uso de clases de configuración personalizadas.