基于注解的容器配置

Spring 为基于注解的配置提供了全面支持,通过在相关的类、方法或字段声明上使用注解,直接操作组件类本身的元数据。正如 示例:AutowiredAnnotationBeanPostProcessor中所述, Spring 结合使用BeanPostProcessors与注解,使核心 IOC 容器能够识别特定的注解。spring-doc.cadn.net.cn

例如,@Autowired 注解提供了与 自动装配协作者中描述相同的功能,但 具有更细粒度的控制和更广泛的适用性。此外,Spring 还支持 JSR-250 注解,如 @PostConstruct@PreDestroy,以及 支持位于 jakarta.inject 包中的 JSR-330(Java 依赖注入)注解,如 @Inject@Named。有关这些注解的详细信息, 请参阅相关章节spring-doc.cadn.net.cn

注解注入在外部属性注入之前执行。因此,当通过混合方式装配时,外部配置(例如,通过 XML 指定的 bean 属性)会有效地覆盖属性上的注解。spring-doc.cadn.net.cn

从技术上讲,你可以将这些后处理器注册为单独的 Bean 定义,但它们在 AnnotationConfigApplicationContext 中已经被隐式注册了。spring-doc.cadn.net.cn

在基于 XML 的 Spring 配置中,您可以包含以下配置标签,以启用与基于注解的配置混合使用:spring-doc.cadn.net.cn

<?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>

<context:annotation-config/> 元素会隐式注册以下后处理器:spring-doc.cadn.net.cn

<context:annotation-config/> 仅在其所定义的同一应用上下文中查找 bean 上的注解。这意味着,如果你将 <context:annotation-config/> 放在用于 WebApplicationContextDispatcherServlet 中,它只会检查控制器中的 @Autowired bean,而不会检查服务层(services)中的 bean。更多信息请参见DispatcherServletspring-doc.cadn.net.cn