此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.1.10Spring中文文档

此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.1.10Spring中文文档

在配置 Spring 时,注解是否比 XML 更好?

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

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

基于注释的配置提供了 XML 设置的替代方法,该配置依赖于 用于连接组件的字节码元数据,而不是 XML 声明。而不是 使用 XML 来描述 Bean 接线,开发人员将配置移动到 组件类本身通过对相关类、方法或字段使用注释 声明。如示例中所述:AutowiredAnnotationBeanPostProcessor,将 与注释结合使用是扩展 Spring IoC 容器。例如,@Autowired注释提供的功能与自动连线协作者中所述的功能相同,但 具有更细粒度的控制和更广泛的适用性。此外,Spring 还提供 支持 JSR-250 注解,例如 和 ,以及 支持软件包中包含的 JSR-330(Dependency Injection for Java)注解,例如 和 。有关这些批注的详细信息 可以在相关部分找到。BeanPostProcessor@PostConstruct@PreDestroyjakarta.inject@Inject@NamedSpring中文文档

注释注入是在 XML 注入之前执行的。因此,XML 配置 覆盖通过这两种方法连接的属性的注释。Spring中文文档

注释注入是在 XML 注入之前执行的。因此,XML 配置 覆盖通过这两种方法连接的属性的注释。Spring中文文档

与往常一样,您可以将后处理器注册为单独的 Bean 定义,但它们 也可以通过在基于 XML 的 Spring 中包含以下标记来隐式注册 配置(注意包含命名空间):contextSpring中文文档

<?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中文文档

<context:annotation-config/>只在相同的 bean 上寻找注释 在其中定义它的应用程序上下文。这意味着,如果你输入 a for a , 它只检查控制器中的 Bean,而不检查服务中的 Bean。有关更多信息,请参见 DispatcherServlet<context:annotation-config/>WebApplicationContextDispatcherServlet@AutowiredSpring中文文档

<context:annotation-config/>只在相同的 bean 上寻找注释 在其中定义它的应用程序上下文。这意味着,如果你输入 a for a , 它只检查控制器中的 Bean,而不检查服务中的 Bean。有关更多信息,请参见 DispatcherServlet<context:annotation-config/>WebApplicationContextDispatcherServlet@AutowiredSpring中文文档