对于最新的稳定版本,请使用 Spring Framework 7.0.6!spring-doc.cadn.net.cn

基于注解的容器配置

注解比 XML 更适合用于配置 Spring 吗?

基于注解的配置的引入引发了这样一个问题:这种方法是否比 XML “更好”?简短的答案是“取决于情况”。详细的解释是,每种方法都有其优缺点,通常由开发者决定哪种策略更适合他们。由于它们的定义方式,注解在其声明中提供了很多上下文,从而导致配置更简短和简洁。然而,XML 在不接触源代码或重新编译的情况下,擅长组件的连接。一些开发人员倾向于将连接信息靠近源代码,而另一些人则认为带注解的类不再是 POJO,并且配置变得分散,更难以控制。spring-doc.cadn.net.cn

无论选择哪种方式,Spring都可以适应这两种风格,甚至可以将它们混合使用。 需要指出的是,通过其 JavaConfig 选项,Spring可以让注解以非侵入的方式使用,而无需修改目标组件的源代码,并且在工具支持方面,所有配置样式都得到 Spring Tools 对 Eclipse、Visual Studio Code 和 Theia 的支持。spring-doc.cadn.net.cn

通过注解配置提供了XML配置的替代方案,该方案依赖于字节码元数据来连接组件,而不是XML声明。开发人员不再使用XML来描述bean连接,而是通过在相关类、方法或字段声明上使用注解,将配置移至组件类本身。如示例: AutowiredAnnotationBeanPostProcessor中所述,将BeanPostProcessor与注解结合使用是扩展Spring IoC容器的常见方法。例如,@Autowired注解提供了与自动连线协作对象中描述的功能相同的能力,但具有更细粒度的控制和更广泛的应用范围。此外,Spring还支持JSR-250注解,如@PostConstruct@PreDestroy,以及支持包含在jakarta.inject包中的JSR-330(Java依赖注入)注解,如@Inject@Named。有关这些注解的详细信息,请参阅相关部分spring-doc.cadn.net.cn

注解注入在XML注入之前执行。因此,XML配置会覆盖通过这两种方法连接的属性的注解。spring-doc.cadn.net.cn

像往常一样,您可以将后处理器作为单独的bean定义进行注册,但也可以通过在基于XML的Spring配置中包含以下标记来隐式注册(注意包含context命名空间):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/> 放入 WebApplicationContext 中用于 DispatcherServlet,它只会检查您的控制器中的 @Autowired bean,而不会检查您的服务。有关更多信息,请参阅 DispatcherServletspring-doc.cadn.net.cn