1. ホーム
  2. java

SpringのコンフィギュレーションXMLスキーマ:バージョンあり、バージョンなし?

2023-09-04 05:25:26

質問

私はSpringの初心者です。私が混乱することの一つは、バージョン管理されたスキーマを持つ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 のスキーマは2つの例で異なっています。

そこで質問ですが、どちらのスタイルを使うのか、そしてその理由は何でしょうか?特に、バージョン管理されたスキーマは将来利用できなくなるのでしょうか。また、バージョン管理されていないスキーマは、Springがスキーマを更新したときに現在のアプリケーションとの互換性を維持できるのでしょうか。

副次的な質問ですが、バージョン管理されたSpringスキーマの一覧はどこにあるのでしょうか?

ありがとうございます。

どのように解決するのですか?

XSD は、アプリケーションで使用しているフレームワークの現在のバージョンにマップされているため、"versionless" を使用することが推奨されています。

アプリケーションやツールは決してウェブからこれらのXSDを取得しようとしてはいけません。 これらのスキーマは JAR に含まれているからです。もしそうなら、それは通常、アプリケーションが使用しているフレームワークのバージョンよりも新しい XSD を使用しようとしているか、IDE/ツールが適切に設定されていないことを意味します。

私の知る限り、特定の XSD バージョンを使用したいケースが 1 つだけあります: より新しいバージョンで廃止/変更された XML 属性を使用しようとする場合です。少なくとも、これは頻繁に起こることではありません。

とにかくSpringチームはSpring 5.0でバージョン管理されたスキーマを削除すべきです。 SPR-13499 .

バージョンレス == 現在のバージョン" の詳細。

これらのXSDファイルはSpring JARに含まれています - "versionless"のXSDはビルド中に最新バージョンにマップされます( spring.schemas ファイルを参照してください)。 また、オンラインで利用可能なファイルも同じ方法でビルドされます( gradleのビルドでターゲットとなる ).