Comprender cómo organizar las clases de una aplicación es fundamental para trabajar con Spring Boot de forma profesional. Las cuatro anotaciones principales o estereotipos definen la responsabilidad de cada capa del sistema y permiten que el framework gestione automáticamente la inyección de dependencias.
¿Qué son los estereotipos en Spring Boot y para qué sirven?
Spring Boot ofrece cuatro anotaciones que clasifican las clases según su función dentro de la arquitectura de la aplicación [0:15]. Cada una representa una capa específica del patrón modelo vista controlador y de la lógica interna del sistema.
¿Qué representa la anotación @Component?
La anotación @Component es la más genérica de todas [0:24]. Se utiliza cuando una clase, módulo o componente resulta demasiado abstracto como para encajar en las otras categorías. Al marcar una clase con @Component, Spring la registra como un bean dentro del contenedor de aplicación y permite inyectarla como dependencia en cualquier otra parte del sistema [1:38].
¿Cuándo usar @Controller en lugar de @Component?
La anotación @Controller se reserva para las clases que se encargan de la capa de vista [0:38]. Estas clases gestionan:
- Métodos HTTP y rutas de la aplicación.
- Respuestas del servidor hacia el cliente.
- Todo lo relacionado con la interfaz gráfica.
Es la implementación directa del controlador dentro del patrón modelo vista controlador [1:50].
¿Qué diferencia hay entre @Service y @Repository?
@Service marca las clases que contienen la lógica de negocio [0:56]. Validaciones con if, estructuras switch case, bucles for y cualquier regla del dominio deben vivir en clases anotadas con @Service.
@Repository se aplica a las clases o interfaces responsables de la persistencia de datos [1:10]. Si el proyecto se conecta a una base de datos como MongoDB, MySQL o Postgres, las operaciones de registro, actualización y consulta deben estar en clases anotadas con @Repository. Normalmente esta anotación se utiliza en interfaces, aunque también puede aplicarse en clases concretas [2:33].
¿Se pueden intercambiar las anotaciones entre capas?
Técnicamente sí, Spring Boot no arrojará un error si anotas una clase de persistencia con @Component en lugar de @Repository [1:58]. Sin embargo, esto constituye una mala práctica. Cada anotación comunica la intención de la clase al equipo de desarrollo y al propio framework. Mezclarlas rompe la claridad arquitectónica y dificulta el mantenimiento del código fuente [2:12].
¿Cómo funciona la inyección de dependencias con estas anotaciones?
Un ejemplo práctico muestra una clase llamada DatabaseAccountService anotada con @Service que implementa la interfaz AccountService [2:48]. Esta clase recibe en su constructor una dependencia llamada RiskAssessor, inyectada mediante la anotación @Autowired [3:05].
- La clase anotada con @Service se convierte en dependencia disponible para otras clases.
- El constructor recibe las dependencias que necesita gracias al contenedor de Spring.
- Un método interno llamado myServiceFunction invoca la implementación de RiskAssessor [3:15].
Este patrón de inyección por constructor es la forma recomendada de conectar componentes entre sí. Al declarar el estereotipo @Service, se indica que la clase será una dependencia que otro objeto consumirá en el futuro [3:25].
Dominar estas cuatro anotaciones es el primer paso para construir aplicaciones con una arquitectura limpia y escalable. Si tienes dudas sobre cuándo elegir una u otra, comparte tu caso en los comentarios.