Spring 配置 XML 模式:有还是没有版本?

2022-08-31 12:24:45

我是春天的新手。让我感到困惑的一件事是,有时我看到XML配置文件具有版本化架构,但有时看到具有非版本化架构的XML配置文件。例如,有时我看到类似的东西

<?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
            http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    
     <context:annotation-config/>
     <context:component-scan base-package="base.package"/>
    
</beans>

有时像这样:

<?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
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">
    
    <context:annotation-config/>
    <context:component-scan base-package="base.package"/>
    
</beans>

请注意,在这两个示例中,和 架构是不同的。spring-beansspring-context

所以,我的问题是,你会使用哪种风格,为什么?特别是,版本化架构将来是否会变得不可用,以及当Spring更新架构时,非版本化架构是否会与当前应用程序保持兼容?

一个附带的问题是,在哪里可以找到版本化弹簧模式的列表?


答案 1

建议使用“无版本”XSD,因为它们映射到您在应用程序中使用的框架的当前版本。

应用程序和工具永远不应该尝试从 Web 获取这些 XSD,因为这些模式包含在 JAR 中。如果是这样,这通常意味着您的应用程序正在尝试使用比您正在使用的框架版本更新的 XSD,或者您的 IDE/工具未正确配置。

据我所知,只有一种情况您希望使用特定的 XSD 版本:尝试使用在较新版本中已弃用/修改的 XML 属性时。至少可以说,这种情况并不经常发生。

无论如何,Spring团队应该删除Spring 5.0的版本化架构,请参阅SPR-13499

有关“无版本 == 当前版本”的更多信息:

这些XSD文件包含在Spring JAR中 - “无版本”XSD在构建期间映射到最新版本(请参阅实际建立该链接的spring.schemas文件)。此外,在线可用的文件也是以相同的方式构建的(请参阅 gradle 构建中的“schemaZip”目标)。


答案 2

我不确定是否有指导,但我个人更喜欢参考非版本化模式 - 一般来说,如果你反对Spring项目的最新版本(Spring核心,集成等),那么你可以参考未版本化的模式。

未版本化的模式指向项目的最新版本,因此,如果您使用的是真正旧版本的Spring(例如,版本2.5与当前发布的4.0版本),则它们可能不是正确的语法,在这种情况下,最好指向版本化的模式。

这里要说的另一点是,如果可能的话,最好完全避免使用xml,并使用基于Java的@Configuration样式来配置你的Spring beans。


推荐