Annotation Based Container Configuration
Configuración del contenedor basada en anotaciones
Spring ofrece un soporte completo para la configuración basada en anotaciones, que opera sobre metadatos de la propia clase de componente mediante anotaciones en las declaraciones de clases, métodos o campos pertinentes. Como se menciona en el ejemplo de AutowiredAnnotationBeanPostProcessor, Spring utiliza BeanPostProcessor junto con anotaciones para que el contenedor IoC principal reconozca anotaciones específicas.
Por ejemplo, la anotación @Autowired proporciona las mismas capacidades descritas en la sección sobre autoconexión de colaboradores, pero con un control más detallado y una aplicabilidad más amplia.
Además, Spring admite las anotaciones JSR-250, como @PostConstruct y @PreDestroy, así como las anotaciones JSR-330 de inyección de dependencias para Java incluidas en el paquete jakarta.inject, como @Inject y @Named.
La inyección mediante anotaciones se realiza antes de la inyección de propiedades externas. Por tanto, la configuración externa —por ejemplo, las propiedades de beans especificadas mediante XML— sobrescribe de forma efectiva las anotaciones de las propiedades cuando se combinan ambos enfoques.
Técnicamente, puedes registrar los posprocesadores como definiciones de beans individuales, pero ya se registran implícitamente en un AnnotationConfigApplicationContext.
En una configuración de Spring basada en XML, puedes incluir la siguiente etiqueta de configuración para combinarla con la configuración basada en anotaciones:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
</beans>
El elemento <context:annotation-config/> registra implícitamente los siguientes posprocesadores:
ConfigurationClassPostProcessorAutowiredAnnotationBeanPostProcessorCommonAnnotationBeanPostProcessorPersistenceAnnotationBeanPostProcessorEventListenerMethodProcessor
<context:annotation-config/> solo busca anotaciones en los beans del mismo contexto de aplicación en el que se define. Esto significa que, si colocas <context:annotation-config/> en un WebApplicationContext de un DispatcherServlet, solo comprobará los beans anotados con @Autowired de tus controladores, y no los de tus servicios.