基于注解的容器配置

Spring全面支持基于注解的配置,通过在相关类、方法或字段声明上使用注解,对组件类本身的元数据进行操作。如示例:AutowiredAnnotationBeanPostProcessor中所述,Spring结合注解使用BeanPostProcessors,使核心IOC容器能够识别特定注解。

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

注解注入在外部属性注入之前执行。因此,当通过混合方法进行连接时,外部配置(例如,XML指定的Bean属性)会有效地覆盖属性的注解。

从技术上讲,您可以将后处理器注册为单独的Bean定义,但它们已经在AnnotationConfigApplicationContext中隐式注册。

在基于XML的Spring设置中,您可以包含以下配置标签以启用与基于注解的配置的混合和匹配

<?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/>元素隐式注册以下后处理器

<context:annotation-config/>只查找在其定义的同一个应用程序上下文中Bean上的注解。这意味着,如果您将<context:annotation-config/>放在DispatcherServletWebApplicationContext中,它只检查控制器中的@Autowired Bean,而不是您的服务。有关更多信息,请参见DispatcherServlet