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

基于注释的容器配置

对于配置 Spring,注释是否比 XML 更好?

基于注释的配置的引入提出了一个问题,即这是否 方法比 XML “更好”。简短的回答是“视情况而定”。长答案是 每种方法都有其优点和缺点,通常,由开发人员决定 决定哪种策略更适合他们。由于它们的定义方式,注释 在他们的声明中提供大量背景信息,从而使内容更短、更简洁 配置。然而,XML 擅长在不接触组件源的情况下连接组件 代码或重新编译它们。一些开发人员更喜欢将布线靠近电源 而其他人则认为带注释的类不再是 POJO,此外, 配置变得去中心化且更难控制。spring-doc.cadn.net.cn

无论选择哪种方式,Spring 都可以容纳两种风格,甚至可以将它们混合在一起。 值得指出的是,通过其 JavaConfig 选项,Spring 允许 注释以非侵入性方式使用,而不接触目标组件的 源代码,并且在工具方面,Spring Tools for Eclipse、Visual Studio Code 和 Theia 支持所有配置样式。spring-doc.cadn.net.cn

基于注释的配置提供了 XML 设置的替代方法,它依赖于 在字节码元数据上连接组件而不是 XML 声明。而不是 使用 XML 来描述 Bean 布线,开发人员将配置移动到 组件类本身,通过使用相关类、方法或字段上的注释 声明。如中所述示例:该AutowiredAnnotationBeanPostProcessor,使用BeanPostProcessor与注释结合使用是扩展 Spring IoC 容器。例如,@Autowired注释提供与自动连接协作者中所述相同的功能,但 具有更细粒度的控制和更广泛的适用性。此外,Spring 还提供了 支持 JSR-250 注释,例如@PostConstruct@PreDestroy,以及 支持 JSR-330(Java 依赖注入)注释包含在jakarta.inject包,例如@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/>仅查找同一 定义它的应用程序上下文。这意味着,如果您将<context:annotation-config/>WebApplicationContext对于一个DispatcherServlet, 它只检查@Autowiredbean 在控制器中,而不是您的服务。请参阅 DispatcherServlet 以了解更多信息。spring-doc.cadn.net.cn