Capítulo 5: Diccionario Completo de Anotaciones (A-Z)
Referencia rápida de todas las anotaciones de Spring Boot, ordenadas alfabéticamente. Para ejemplos de código detallados, consulte los capítulos 1 a 4.
A
| Anotación | Descripción |
|---|---|
| @ActiveProfiles | Activa perfiles específicos de Spring para pruebas unitarias. Permite cargar application-test.yml, por ejemplo. |
| @After | (JUnit 4) Ejecuta código después de cada método de prueba. |
| @AfterClass | (JUnit 4) Ejecuta código después de todos los métodos de prueba de una clase. |
| @AfterEach | (JUnit 5) Ejecuta código después de cada método de prueba. Reemplaza a @After. |
| @Async | Ejecuta un método de manera asíncrona en un hilo separado. Requiere @EnableAsync. |
| @AutoConfigureDataJpa | Configura automáticamente JPA para una prueba unitaria. |
| @AutoConfigureJsonTesters | Configura automáticamente las herramientas de serialización/deserialización JSON para pruebas. |
| @AutoConfigureMockMvc | Configura automáticamente el objeto MockMvc para una prueba unitaria. |
| @AutoConfigureWebTestClient | Configura automáticamente el WebTestClient para pruebas WebFlux. |
| @Autowired | Inyecta automáticamente una dependencia (bean de Spring) en una clase. Se recomienda la inyección por constructor. |
B
| Anotación | Descripción |
|---|---|
| @Bean | Declara un método que retorna un objeto gestionado por el contenedor de Spring. Se utiliza en clases @Configuration. |
| @Before | (JUnit 4) Ejecuta código antes de cada método de prueba. |
| @BeforeClass | (JUnit 4) Ejecuta código antes de todos los métodos de prueba de una clase. |
| @BeforeEach | (JUnit 5) Ejecuta código antes de cada método de prueba. Reemplaza a @Before. |
C
| Anotación | Descripción |
|---|---|
| @Cacheable | Almacena en caché el resultado de un método. Las llamadas siguientes retornan el resultado desde la caché. |
| @CacheConfig | Configura los parámetros de caché (nombre, tiempo de vida, tamaño máximo) para toda una clase. |
| @CacheEvict | Elimina una o todas las entradas de la caché cuando se llama al método. |
| @CachePut | Actualiza la caché con el resultado del método, sin usar nunca la caché existente. |
| @CircuitBreaker | (Spring Cloud) Protege un método contra fallos repetidos limitando las llamadas cuando el servicio está caído. |
| @Column | Configura el mapeo de una propiedad JPA a una columna de base de datos (nombre, nullable, unique, longitud). |
| @Component | Marca una clase como un bean genérico de Spring, detectado automáticamente por el component scan. |
| @ComponentScan | Escanea los paquetes para detectar automáticamente las clases anotadas con @Component, @Service, @Repository, etc. |
| @Conditional | Condiciona la creación de un bean según una condición personalizada. |
| @ConditionalOnClass | Crea un bean solo si una clase específica está presente en el classpath. |
| @ConditionalOnMissingBean | Crea un bean solo si no existe ya otro bean del mismo tipo. |
| @ConditionalOnProperty | Crea un bean solo si una propiedad tiene un cierto valor en la configuración. |
| @Configuration | Marca una clase de configuración de Spring que contiene métodos @Bean. |
| @ConfigurationProperties | Vincula un grupo de propiedades del archivo de configuración a un objeto Java (ej: app.mail.host). |
| @Controller | Marca una clase como controlador Spring MVC que retorna vistas (plantillas HTML). |
| @ControllerAdvice | Define un asesor global para todos los controladores (gestión centralizada de excepciones, binding, etc.). |
| @CrossOrigin | Permite solicitudes HTTP cross-origin (CORS) desde dominios específicos o todos los dominios. |
D
| Anotación | Descripción |
|---|---|
| @DataJpaTest | Prueba especializada que carga solo la capa JPA (repositories, EntityManager, BDD en memoria). |
| @DeleteMapping | Atajo para @RequestMapping(method = DELETE). Mapea un método a una solicitud HTTP DELETE. |
| @Disabled | (JUnit 5) Desactiva temporalmente una prueba unitaria sin eliminarla del código. |
E
| Anotación | Descripción |
|---|---|
| @EnableAsync | Activa la ejecución asíncrona en la aplicación. Necesario para que funcione @Async. |
| @EnableCaching | Activa el uso de caché en la aplicación. Necesario para que funcione @Cacheable. |
| @EnableConfigurationProperties | Activa la vinculación automática de propiedades de configuración a objetos @ConfigurationProperties. |
| @EnableJms | Activa el soporte JMS (Java Message Service) para mensajería en la aplicación. |
| @EnableJpaRepositories | Activa el soporte de repositories de Spring Data JPA. Configurado automáticamente por Spring Boot. |
| @EnableScheduling | Activa la planificación de tareas. Necesario para que funcione @Scheduled. |
| @EnableWebMvc | Activa la configuración de Spring MVC. Rara vez necesario porque Spring Boot lo activa automáticamente. |
| @EnableWebSecurity | Activa la configuración personalizada de Spring Security. |
| @EnableMethodSecurity | Activa la seguridad a nivel de métodos (@PreAuthorize, @PostAuthorize, @Secured). |
| @Entity | Marca una clase como entidad JPA, mapeada a una tabla en la base de datos. |
| @Enumerated | Define cómo se almacena un enum Java en la base de datos: STRING (texto) o ORDINAL (número). |
| @EventListener | Escucha eventos de Spring (inicio de la aplicación, eventos personalizados, etc.). |
| @ExceptionHandler | Maneja una excepción específica en un controlador o un @ControllerAdvice. Retorna una respuesta de error personalizada. |
| @ExtendWith | (JUnit 5) Extiende las funcionalidades de las pruebas con extensiones (ej: SpringExtension, MockitoExtension). |
F
| Anotación | Descripción |
|---|---|
| @Fallback | (Spring Cloud) Proporciona un método alternativo cuando un método @CircuitBreaker falla. |
| @FlywayTest | Prueba las migraciones de base de datos Flyway en pruebas de integración. |
| @Formula | (Hibernate) Define una columna calculada a nivel SQL, sin columna física en la base de datos. |
G
| Anotación | Descripción |
|---|---|
| @GeneratedValue | Define la estrategia de generación automática de la clave primaria (IDENTITY, SEQUENCE, UUID, AUTO). |
| @GetMapping | Atajo para @RequestMapping(method = GET). Mapea un método a una solicitud HTTP GET. |
I
| Anotación | Descripción |
|---|---|
| @Id | Marca un campo como clave primaria de una entidad JPA. |
| @Import | Importa otras clases de configuración en una clase @Configuration. |
| @InitBinder | Personaliza la vinculación de datos entre solicitudes HTTP y objetos Java (conversión, validación, formateo). |
J
| Anotación | Descripción |
|---|---|
| @JoinColumn | Define la columna de clave foránea para una relación JPA (@ManyToOne, @OneToOne). |
| @JoinTable | Define la tabla de unión para una relación @ManyToMany (nombre de la tabla, columnas de unión). |
| @JmsListener | Define un método que escucha mensajes JMS en una cola o un topic. |
| @JsonFormat | Personaliza el formato de serialización JSON (fechas, números). Ej: @JsonFormat(pattern = "yyyy-MM-dd"). |
| @JsonIgnore | Excluye una propiedad de la serialización/deserialización JSON. |
| @JsonInclude | Controla qué propiedades se incluyen en el JSON (ej: excluir valores null). |
| @JsonProperty | Renombra una propiedad en el JSON. Ej: @JsonProperty("full_name") para un campo fullName. |
| @JsonSubTypes | Define los subtipos para la deserialización polimórfica JSON. |
| @JsonTest | Prueba especializada solo para serialización/deserialización JSON. |
| @JsonTypeInfo | Añade información de tipo en el JSON para permitir la deserialización polimórfica. |
| @JsonView | Filtra las propiedades JSON según la vista solicitada (ej: vista pública vs vista admin). |
L
| Anotación | Descripción |
|---|---|
| @Lazy | Retrasa la inicialización de un bean hasta su primer uso. Mejora el tiempo de arranque. |
| @Lob | Indica un campo de tipo Large Object: CLOB (texto largo) o BLOB (binario). |
M
| Anotación | Descripción |
|---|---|
| @ManyToMany | Define una relación muchos-a-muchos entre dos entidades JPA. Utiliza una tabla de unión. |
| @ManyToOne | Define una relación muchos-a-uno. El lado "Many" lleva la clave foránea. |
| @MessageMapping | (WebSocket/STOMP) Mapea un método a un destino de mensajería. |
| @MessagingGateway | (Spring Integration) Define una interfaz de gateway para enviar mensajes. |
| @MockBean | Reemplaza un bean de Spring por un mock de Mockito en una prueba. |
| @MockMvc | Inyecta una instancia de MockMvc para simular solicitudes HTTP en pruebas. |
| @ModelAttribute | Vincula los parámetros de una solicitud HTTP a un objeto Java. También se usa para añadir atributos al modelo MVC. |
| @Modifying | Indica que un método @Query ejecuta un UPDATE o DELETE (no un SELECT). |
N
| Anotación | Descripción |
|---|---|
| @NamedQuery | Define una consulta JPQL nombrada directamente en una entidad. |
| @NamedQueries | Agrupa varias @NamedQuery en una misma entidad. |
O
| Anotación | Descripción |
|---|---|
| @OneToMany | Define una relación uno-a-muchos entre dos entidades JPA. El lado "One" es el padre. |
| @OneToOne | Define una relación uno-a-uno entre dos entidades JPA. |
| @Order | Define el orden de prioridad de un bean. Cuanto menor el número, mayor la prioridad. |
P
| Anotación | Descripción |
|---|---|
| @PatchMapping | Atajo para @RequestMapping(method = PATCH). Actualización parcial de un recurso. |
| @PathVariable | Extrae una variable desde la ruta de la URL. Ej: /users/\{id\} → @PathVariable Long id. |
| @PostAuthorize | Verifica las autorizaciones después de la ejecución de un método (puede verificar el valor retornado). |
| @PostConstruct | Ejecuta un método justo después de la inyección de todas las dependencias del bean. |
| @PostMapping | Atajo para @RequestMapping(method = POST). Creación de un nuevo recurso. |
| @PreAuthorize | Verifica las autorizaciones antes de la ejecución de un método. Soporta expresiones SpEL. |
| @PreDestroy | Ejecuta un método justo antes de la destrucción del bean (limpieza, cierre de conexiones). |
| @Primary | Define el bean por defecto cuando existen varios beans del mismo tipo. |
| @Profile | Activa un bean o una configuración solo para ciertos perfiles (dev, test, prod). |
| @PutMapping | Atajo para @RequestMapping(method = PUT). Reemplazo completo de un recurso. |
Q
| Anotación | Descripción |
|---|---|
| @Qualifier | Especifica qué bean inyectar cuando existen varios beans del mismo tipo. |
| @Query | Define una consulta JPQL o SQL nativa personalizada en un método de repository. |
R
| Anotación | Descripción |
|---|---|
| @Repository | Marca una clase como capa de acceso a datos. Activa la traducción de excepciones SQL a excepciones de Spring. |
| @RequestBody | Deserializa el cuerpo de la solicitud HTTP (JSON) en un objeto Java. |
| @RequestHeader | Extrae el valor de una cabecera HTTP (Authorization, Content-Type, User-Agent, etc.). |
| @RequestMapping | Anotación base para mapear una URL a un controlador o método. Puede especificar el método HTTP. |
| @RequestParam | Extrae un parámetro de la query string. Ej: /search?name=Java → @RequestParam String name. |
| @RequestPart | Extrae una parte de una solicitud HTTP multipart (archivos, imágenes subidas). |
| @ResponseBody | Fuerza el retorno de un método en JSON/XML directamente en el cuerpo de la respuesta HTTP. |
| @ResponseStatus | Define el código HTTP retornado por un método (200, 201, 204, 404, etc.) o una excepción. |
| @RestClientTest | Prueba especializada para clientes REST. Carga solo la configuración del cliente. |
| @RestController | Combinación de @Controller + @ResponseBody. Cada método retorna JSON directamente. |
| @RestControllerAdvice | Combinación de @ControllerAdvice + @ResponseBody. Gestión global de excepciones para APIs REST. |
| @Retryable | (Spring Retry) Reintenta automáticamente un método en caso de fallo (ej: error de red o BDD). |
| @RolesAllowed | (JSR-250) Especifica los roles permitidos para un método. Alternativa estándar a @Secured. |
S
| Anotación | Descripción |
|---|---|
| @Scheduled | Programa la ejecución periódica de un método (fixedRate, fixedDelay, cron). Requiere @EnableScheduling. |
| @Scope | Define el ámbito de un bean: singleton (por defecto), prototype, request, session, application. |
| @Secured | Especifica los roles requeridos para acceder a un método. Más simple que @PreAuthorize. |
| @SendTo | (WebSocket/STOMP) Especifica el destino de respuesta para un mensaje WebSocket. |
| @Service | Marca una clase como capa de lógica de negocio. Detectado por el component scan. |
| @SessionAttributes | Almacena atributos del modelo en la sesión HTTP entre solicitudes. |
| @SessionScope | Define el ámbito de un bean como sesión HTTP (un bean por sesión de usuario). |
| @SpyBean | Envuelve un bean real con un spy de Mockito en pruebas (llamadas reales salvo las stub). |
| @SpringBootApplication | Punto de entrada de la aplicación. Combina @Configuration, @EnableAutoConfiguration y @ComponentScan. |
| @SpringBootTest | Carga el contexto completo de Spring para pruebas de integración. |
| @Sql | Ejecuta scripts SQL antes o después de una prueba para preparar o limpiar la base de datos. |
T
| Anotación | Descripción |
|---|---|
| @Table | Personaliza el nombre de la tabla, el esquema, las restricciones de unicidad y los índices para una entidad JPA. |
| @Test | (JUnit) Marca un método como prueba unitaria. |
| @TestConfiguration | Proporciona una configuración de Spring específica para pruebas (beans de prueba, mocks). |
| @Timeout | (JUnit 5) Define un tiempo máximo para la ejecución de una prueba. La prueba falla si se supera el tiempo. |
| @Transactional | Gestiona las transacciones de base de datos. Commit si tiene éxito, rollback si hay excepción. readOnly = true optimiza las lecturas. |
| @TransactionalEventListener | Escucha un evento de Spring y lo ejecuta solo después del commit (o rollback) de la transacción. |
| @Transient | Excluye un campo de la persistencia JPA (sin columna en la base de datos). |
V
| Anotación | Descripción |
|---|---|
| @Valid | Activa la validación Bean Validation sobre un objeto (@NotNull, @Size, @Email, etc.). |
| @Validated | Variante de Spring de @Valid con soporte de grupos de validación. |
| @Value | Inyecta un valor desde el archivo de configuración. Ej: @Value("${app.name}"). Soporta valores por defecto y SpEL. |
| @ValueSource | (JUnit 5) Proporciona valores de entrada a una prueba parametrizada. |
W
| Anotación | Descripción |
|---|---|
| @WebFluxTest | Prueba especializada para controladores WebFlux (programación reactiva). |
| @WebMvcTest | Prueba especializada que carga solo la capa de controlador MVC (sin BDD, sin servicios reales). |
| @WebTestClient | Inyecta un WebTestClient para simular solicitudes HTTP en pruebas WebFlux. |
Anotaciones de Validación (Bean Validation)
| Anotación | Descripción |
|---|---|
| @NotNull | El campo no puede ser null. |
| @NotEmpty | El campo no puede ser null ni vacío (String, Collection, Map). |
| @NotBlank | El campo no puede ser null, vacío ni contener solo espacios. |
| @Size(min, max) | El tamaño debe estar entre min y max (String, Collection). |
| @Min(value) | El valor numérico debe ser mayor o igual a value. |
| @Max(value) | El valor numérico debe ser menor o igual a value. |
| El campo debe tener un formato de dirección de correo electrónico válido. | |
| @Pattern(regexp) | El campo debe coincidir con la expresión regular dada. |
| @Positive | El número debe ser estrictamente positivo (> 0). |
| @PositiveOrZero | El número debe ser positivo o cero (>= 0). |
| @Negative | El número debe ser estrictamente negativo (< 0). |
| @Past | La fecha debe estar en el pasado. |
| @Future | La fecha debe estar en el futuro. |
| @DecimalMin | El valor decimal debe ser mayor o igual al mínimo. |
| @DecimalMax | El valor decimal debe ser menor o igual al máximo. |
Estadísticas
En resumen
Este diccionario cubre 120+ anotaciones distribuidas en:
- Core Spring: ~25 anotaciones (IoC, DI, configuración, ciclo de vida)
- Web / REST: ~20 anotaciones (mapeo, parámetros, respuestas, errores)
- Data / JPA: ~20 anotaciones (entidades, relaciones, consultas, transacciones)
- JSON / Jackson: ~7 anotaciones (formato, filtro, ignore)
- Security: ~7 anotaciones (configuración, autorización)
- Cache: ~5 anotaciones (cacheable, evict, put, config)
- Async / Scheduling: ~5 anotaciones
- Test: ~25 anotaciones (JUnit, Spring Test, mocks)
- Validation: ~15 anotaciones (Bean Validation)
- Messaging: ~5 anotaciones (JMS, WebSocket)
- Cloud / Resilience: ~3 anotaciones (CircuitBreaker, Retry, Fallback)