Skip to content

1. Introducción al Ecosistema Spring

Spring Framework es un framework de desarrollo de aplicaciones Java que proporciona una infraestructura completa para crear aplicaciones empresariales robustas y escalables.

  • Inversión de Control (IoC): El framework gestiona la creación y ciclo de vida de los objetos
  • Inyección de Dependencias (DI): Facilita el desacoplamiento entre componentes
  • Programación Orientada a Aspectos (AOP): Permite separar preocupaciones transversales
  • Modularidad: Usa solo los módulos que necesitas
  • Integración: Se conecta fácilmente con otras tecnologías

AñoVersiónHito importante
2002-Rod Johnson publica “Expert One-on-One J2EE Design”
20041.0Primera versión oficial de Spring Framework
20062.0Soporte para anotaciones y namespaces XML
20093.0Configuración basada en Java, REST support
20134.0Soporte para Java 8, WebSocket
2014-Spring Boot 1.0 revoluciona el desarrollo
20175.0Programación reactiva, Kotlin support
20226.0Java 17+, Jakarta EE 9+, AOT compilation

Problema: Acoplamiento fuerte
// ❌ Código altamente acoplado
public class PedidoService {
// Dependencia creada directamente - difícil de testear
private UsuarioRepository usuarioRepo = new UsuarioRepositoryImpl();
private EmailService emailService = new EmailServiceImpl();
public void procesarPedido(Pedido pedido) {
Usuario usuario = usuarioRepo.buscar(pedido.getUsuarioId());
// lógica...
emailService.enviarConfirmacion(usuario.getEmail());
}
}
Solución: Inyección de dependencias
// ✅ Código desacoplado con Spring
@Service
public class PedidoService {
private final UsuarioRepository usuarioRepo;
private final EmailService emailService;
// Spring inyecta las dependencias automáticamente
@Autowired
public PedidoService(UsuarioRepository usuarioRepo, EmailService emailService) {
this.usuarioRepo = usuarioRepo;
this.emailService = emailService;
}
public void procesarPedido(Pedido pedido) {
Usuario usuario = usuarioRepo.buscar(pedido.getUsuarioId());
// lógica...
emailService.enviarConfirmacion(usuario.getEmail());
}
}
ProblemaSolución Spring
Acoplamiento fuerteInyección de dependencias
Código repetitivo (boilerplate)Configuración automática
Gestión de transacciones manual@Transactional
Configuración XML extensaAnotaciones y auto-configuración
Testing difícilMocks e inyección de dependencias

🏗️ 1.4 Arquitectura General del Framework

Section titled “🏗️ 1.4 Arquitectura General del Framework”
Arquitectura modular de Spring
┌─────────────────────────────────────────────────────────────┐
│ SPRING FRAMEWORK │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ Spring │ │ Spring │ │ Spring │ │
│ │ Web MVC │ │ WebFlux │ │ Security │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ Spring │ │ Spring │ │ Spring │ │
│ │ Data │ │ AOP │ │ Messaging │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────────────────────────────────────────────────┐│
│ │ SPRING CORE ││
│ │ (IoC Container, Beans, Context, SpEL) ││
│ └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘

⚡ 1.5 Diferencia entre Spring Framework y Spring Boot

Section titled “⚡ 1.5 Diferencia entre Spring Framework y Spring Boot”
AspectoSpring FrameworkSpring Boot
ConfiguraciónManual (XML o Java)Auto-configuración
ServidorExterno (Tomcat, etc.)Embebido
DependenciasGestión manualStarters predefinidos
Tiempo de inicioMás configuraciónRápido (convención)
FlexibilidadTotal controlOpinado pero flexible
Spring Boot: Mínima configuración
// Spring Framework tradicional requiere:
// - web.xml
// - applicationContext.xml
// - dispatcher-servlet.xml
// - Configuración de Tomcat externo
// - Múltiples dependencias manuales
// Spring Boot solo necesita:
@SpringBootApplication
public class MiAplicacion {
public static void main(String[] args) {
SpringApplication.run(MiAplicacion.class, args);
}
}
@RestController
class HolaController {
@GetMapping("/hola")
public String hola() {
return "¡Hola Mundo!";
}
}

ProyectoDescripción
Spring BootConfiguración automática y arranque rápido
Spring DataAcceso simplificado a bases de datos
Spring SecurityAutenticación y autorización
Spring CloudHerramientas para microservicios
Spring BatchProcesamiento por lotes
Spring IntegrationIntegración empresarial
Spring WebFluxProgramación reactiva

  • Netflix: Microservicios con Spring Cloud
  • Amazon: Servicios internos
  • Alibaba: Plataforma de e-commerce
  • LinkedIn: Backend de servicios
  • Ticketmaster: Sistema de ventas
Casos de uso comunes
// 1. API REST para aplicación móvil
@RestController
@RequestMapping("/api/productos")
public class ProductoController {
@GetMapping
public List<Producto> listar() { ... }
}
// 2. Sistema de autenticación
@Configuration
@EnableWebSecurity
public class SecurityConfig { ... }
// 3. Microservicio con mensajería
@Service
public class PedidoService {
@Autowired
private RabbitTemplate rabbitTemplate;
public void procesarPedido(Pedido pedido) {
rabbitTemplate.convertAndSend("pedidos", pedido);
}
}

✅ 1.8 Ventajas Frente a Otros Frameworks

Section titled “✅ 1.8 Ventajas Frente a Otros Frameworks”
CaracterísticaSpringJakarta EEMicronautQuarkus
Madurez⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Comunidad⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Documentación⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Tiempo arranque⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Ecosistema⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
  1. Ecosistema maduro: +20 años de desarrollo
  2. Gran comunidad: Millones de desarrolladores
  3. Documentación excelente: Guías, tutoriales, ejemplos
  4. Flexibilidad: Desde monolitos hasta microservicios
  5. Empleabilidad: Alta demanda en el mercado laboral
🐝