Spring 如何从类路径中查找 XSD 文件

2022-09-03 14:36:24

在我们的弹簧配置中,我们将bean标签放如下:

<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">

现在春天必须从我的calsspath中找出文件的位置和。spring-beans.xsdspring-context.xsd

我在这个路径上找到了一些xsd文件:

spring-context-4.1.5.RELEASE.jar/org/springframework/context/config

spring-context-2.5.xsd
spring-context-3.0.xsd
spring-context-3.1.xsd
spring-context-3.2.xsd
spring-context-4.0.xsd
spring-context-4.1.xsd

当搜索spring-beans.xsd文件时,我在这个路径中找到了它一些文件:

spring-beans-4.1.5.RELEASE.jar/org/springframework/beans/factory/xml

spring-beans-2.5.xsd
spring-beans-3.0.xsd
spring-beans-3.1.xsd
spring-beans-3.2.xsd
spring-beans-4.0.xsd
spring-beans-4.1.xsd

Spring将如何知道在哪里可以找到此文件,因为我的标记中的架构位置与此文件的实际位置之间没有链接。此外,我能够找到这样的文件,然后即使我们没有在标签中指定任何版本,spring也会知道是什么。beansspring-beans-<version>.xsdspring-beans.xsd<beans>


答案 1

一些弹簧库包含一些文件,如META-INF/spring.schemas。

名为“spring.schemas”的属性文件包含 XML Schema 位置(与 XML 文件中的架构声明一起引用,这些文件将架构用作 'xsi:schemaLocation' 属性的一部分)到类路径资源的映射。需要此文件来防止Spring绝对必须使用需要Internet访问权限来检索模式文件的默认EntityResolver。如果在此属性文件中指定映射,则 Spring 将在类路径上搜索模式

例如:

spring.schemas of spring-beans-x.x.x-RELEASE.jar

http\://www.springframework.org/schema/beans/spring-beans-2.0.xsd=org/springframework/beans/factory/xml/spring-beans-2.0.xsd
http\://www.springframework.org/schema/beans/spring-beans-2.5.xsd=org/springframework/beans/factory/xml/spring-beans-2.5.xsd
http\://www.springframework.org/schema/beans/spring-beans-3.0.xsd=org/springframework/beans/factory/xml/spring-beans-3.0.xsd
http\://www.springframework.org/schema/beans/spring-beans-3.1.xsd=org/springframework/beans/factory/xml/spring-beans-3.1.xsd
http\://www.springframework.org/schema/beans/spring-beans-3.2.xsd=org/springframework/beans/factory/xml/spring-beans-3.2.xsd
http\://www.springframework.org/schema/beans/spring-beans.xsd=org/springframework/beans/factory/xml/spring-beans-3.2.xsd

简而言之,上述属性允许它将 XSD 资源映射到 schemaLocation 属性。

有关更多详细信息,另请参阅需要了解 spring.handlers 和 spring.schemas


答案 2

推荐