クラス PathMatchingResourcePatternResolver
- 実装されたすべてのインターフェース:
ResourceLoader
,ResourcePatternResolver
- 既知の直属サブクラス
ServletContextResourcePatternResolver
ResourcePatternResolver
実装。 ソースパスは、ターゲット Resource
に 1 対 1 でマッピングされる単純なパスである場合もあれば、特別な "classpath*:
" プレフィックスや内部 Ant スタイルパスパターン (Spring の AntPathMatcher
ユーティリティを使用して照合される) を含む場合もあります。後者は両方とも事実上ワイルドカードです。
ワイルドカードなし
単純なケースでは、指定された場所のパスが "classpath*:
" プレフィックスで始まらず、PathMatcher
パターンを含んでいない場合、このリゾルバーは、基になる ResourceLoader
の getResource()
呼び出しを介して単一のリソースを返すだけです。例としては、"file:C:/context.xml
" などの実際の URL、"classpath:/context.xml
" などの疑似 URL、および "/WEB-INF/context.xml
" などのプレフィックスのない単純なパスがあります。後者は、基になる ResourceLoader
に固有の方法で解決されます (たとえば、WebApplicationContext
の場合は ServletContextResource
)。
Ant スタイルのパターン
パスの場所に Ant スタイルのパターンが含まれる場合、例:
/WEB-INF/*-context.xml com/example/**/applicationContext.xml file:C:/some/path/*-context.xml classpath:com/example/**/applicationContext.xmlリゾルバーは、より複雑ですが定義された手順に従ってワイルドカードを解決しようとします。最後の非ワイルドカードセグメントまでのパスに対して
Resource
を生成し、そこから URL
を取得します。この URL が "jar:
" URL またはコンテナー固有のバリアント (たとえば、WebLogic の "zip:
"、WebSphere の "wsjar
" など) でない場合は、URL に関連付けられたファイルシステムのルートディレクトリが取得され、ファイルシステムを走査してワイルドカードを解決します。jar URL の場合、リゾルバーはそこから java.net.JarURLConnection
を取得するか、jar URL を手動で解析してから、jar ファイルの内容を走査してワイルドカードを解決します。移植性への影響
指定されたパスがすでにファイル URL である場合(明示的に、またはベース ResourceLoader
がファイルシステムの 1 つであるために暗黙的に)、ワイルドカードは完全に移植可能な方法で機能することが保証されます。
指定されたパスがクラスパスの場所である場合、リゾルバーは、Classloader.getResource()
呼び出しを介して、最後の非ワイルドカードパスセグメント URL を取得する必要があります。これは (最後のファイルではなく) パスの単なるノードであるため、この場合にどのような種類の URL が返されるかは (ClassLoader Javadoc では) 実際には未定義です。実際には、通常、クラスパスリソースがファイルシステムの場所に解決されるディレクトリを表す java.io.File
、またはクラスパスリソースが jar の場所に解決される何らかの jar URL です。ただし、この操作には移植性に関する懸念があります。
最後の非ワイルドカードセグメントに対して jar URL が取得された場合、リゾルバーはそこから java.net.JarURLConnection
を取得できるか、jar URL を手動で解析して、jar の内容を調べてワイルドカードを解決できる必要があります。これはほとんどの環境で機能しますが、他の環境では失敗します。jar から取得したリソースのワイルドカード解決を信頼する前に、特定の環境で徹底的にテストすることを強くお勧めします。
classpath*:
プレフィックス
"classpath*:
" プレフィックスを介して、同じ名前を持つ複数のクラスパスリソースを取得するための特別なサポートがあります。例: "classpath*:META-INF/beans.xml
" は、"classes" ディレクトリまたは JAR ファイルにある、クラスパス内のすべての "META-INF/beans.xml" ファイルを検索します。これは、各 jar ファイル内の同じ場所にある同じ名前の構成ファイルを自動検出する場合に特に便利です。内部的には、これは ClassLoader.getResources()
呼び出しを介して発生し、完全に移植可能です。
"classpath*:
" プレフィックスは、ロケーションパスの残りの部分で PathMatcher
パターンと組み合わせることもできます。たとえば、"classpath*:META-INF/*-beans.xml"
" です。この場合、解決戦略はかなり単純です。最後の非ワイルドカードパスセグメントで ClassLoader.getResources()
呼び出しが使用され、クラスローダー階層内の一致するすべてのリソースが取得され、各リソースから同じ PathMatcher
が取得されます。前述の解決戦略は、ワイルドカードサブパターンに使用されます。
その他の注意事項
Spring Framework 6.0 以降、getResources(String)
が "classpath*:
" プレフィックスを使用するロケーションパターンで呼び出される場合、システムモジュールを除く Boot 層内のすべてのモジュールが最初に検索されます。次に、前述のように ClassLoader
SE API を使用してクラスパスを検索し、結合された結果を返します。クラスパス検索の制限の一部は、アプリケーションがモジュールとしてデプロイされている場合には適用されない場合があります。
警告 : Ant スタイルのパターンと組み合わせた "classpath*:
" は、実際のターゲットファイルがファイルシステム内に存在しない限り、パターンが開始される前に少なくとも 1 つのルートディレクトリでのみ確実に動作することに注意してください。これは、"classpath*:*.xml
" のようなパターンは、jar ファイルのルートからではなく、展開されたディレクトリのルートからのみファイルを取得することを意味します。これは、渡された空の文字列 (検索する潜在的なルートを示す) のファイルシステムの場所のみを返す JDK の ClassLoader.getResources()
メソッドの制限に起因します。この ResourcePatternResolver
実装は、URLClassLoader
SE イントロスペクションと "java.class.path
" マニフェスト評価を通じて jar ルートルックアップの制限を軽減しようとします。ただし、移植性は保証されません。
警告 : "classpath:
" リソースを含む Ant スタイルのパターンでは、検索対象の基本パッケージが複数のクラスパスの場所で利用可能な場合、一致するリソースが見つかるとは限りません。これは、次のようなリソースがあるためです。
com/example/package1/service-context.xmlクラスパスの場所は 1 つだけ存在する可能性がありますが、次のような場所のパターンが存在する場合
classpath:com/example/**/service-context.xmlを使用して解決しようとすると、リゾルバーは
getResource("com/example")
によって返された (最初の) URL に基づいて機能します。com/example
基本パッケージノードが複数のクラスパスの場所に存在する場合、実際に必要なリソースが最初の URL の com/example
基本パッケージに存在しない可能性があります。このような場合は、基本パッケージを含むすべてのクラスパスの場所を検索する同じ Ant スタイルパターンで "classpath*:
" を使用することをお勧めします。- 導入:
- 1.0.2
- 作成者:
- Juergen Hoeller, Colin Sampaleanu, Marius Bogoevici, Costin Leau, Phillip Webb, Sam Brannen, Sebastien Deleuze, Dave Syer
- 関連事項:
フィールドサマリー
インターフェース org.springframework.core.io.ResourceLoader から継承されたフィールド
CLASSPATH_URL_PREFIX
インターフェース org.springframework.core.io.support.ResourcePatternResolver から継承されたフィールド
CLASSPATH_ALL_URL_PREFIX
コンストラクターのサマリー
コンストラクターコンストラクター説明DefaultResourceLoader
でPathMatchingResourcePatternResolver
を作成します。PathMatchingResourcePatternResolver
(ClassLoaderSE classLoader) PathMatchingResourcePatternResolver
(ResourceLoader resourceLoader) 提供されたResourceLoader
を使用してPathMatchingResourcePatternResolver
を作成します。方法の概要
修飾子と型メソッド説明protected void
addAllClassLoaderJarRoots
(ClassLoaderSE classLoader, SetSE<Resource> result) すべてのURLClassLoader
SE URL で jar ファイル参照を検索し、jar ファイルコンテンツのルートへのポインターの形式で、指定されたリソースのセットにそれぞれを追加します。protected void
addClassPathManifestEntries
(SetSE<Resource> result) Class-Path
マニフェストエントリ (システムクラスローダーによってjava.class.path
JVM システムプロパティに追加される) から jar ファイル参照を特定し、それぞれを jar ファイルコンテンツのルートへのポインタの形式で指定されたリソースのセットに追加します。void
ローカルリソースキャッシュをクリアし、キャッシュされたすべての classpath/jar 構造を削除します。protected Resource
構成されたClassLoader
から返された指定された URL をResource
に変換し、パターンなしのパス検索に適用します (findAllClassPathResources(java.lang.String)
を参照)。protected StringSE
determineRootDir
(StringSE location) 指定された場所のルートディレクトリを決定します。構成されたClassLoader
を介して、指定されたパスを持つすべてのクラスパスリソースを検索します。doFindPathMatchingFileResources
(Resource rootDirResource, StringSE subPattern) Ant スタイルのPathMatcher
を介して、指定されたルートディレクトリのファイルシステム内で、指定された場所のサブパターンに一致するすべてのリソースを検索します。doFindPathMatchingJarResources
(Resource rootDirResource, URLSE rootDirUrl, StringSE subPattern) Ant スタイルのPathMatcher
を介して、指定された場所のパターンに一致する jar ファイル内のすべてのリソースを検索します。protected Resource[]
findAllClassPathResources
(StringSE location) ClassLoader を介して、指定された場所のすべてのクラスの場所リソースを検索します。findAllModulePathResources
(StringSE locationPattern) モジュールパスで見つかったすべての一致するリソースについて、指定された場所のパターンをResource
オブジェクトに解決します。protected Resource[]
findPathMatchingResources
(StringSE locationPattern) Ant スタイルのPathMatcher
を介して、指定された場所のパターンに一致するすべてのリソースを検索します。このResourceLoader
で使用されるClassLoader
SE を公開します。protected JarFileSE
getJarFile
(StringSE jarFileUrl) 指定された jar ファイルの URL を JarFile オブジェクトに解決します。このリソースパターンリゾルバーが使用するPathMatcher
を返します。getResource
(StringSE location) 指定されたリソースの場所のResource
ハンドルを返します。このパターンリゾルバーが動作するResourceLoader
を返します。Resource[]
getResources
(StringSE locationPattern) 指定されたロケーションパターンをResource
オブジェクトに解決します。protected boolean
isJarResource
(Resource resource) 指定されたリソースハンドルが、doFindPathMatchingJarResources(org.springframework.core.io.Resource, java.net.URL, java.lang.String)
メソッドが処理できる jar リソースを示しているかどうかを確認します。protected Resource
resolveRootDirResource
(Resource original) 指定されたルートディレクトリリソースを解決してパスを照合します。void
setPathMatcher
(PathMatcher pathMatcher) このリソースパターンリゾルバーに使用するPathMatcher
実装を設定します。
コンストラクターの詳細
PathMatchingResourcePatternResolver
public PathMatchingResourcePatternResolver()DefaultResourceLoader
でPathMatchingResourcePatternResolver
を作成します。ClassLoader アクセスは、スレッドコンテキストクラスローダーを介して行われます。
PathMatchingResourcePatternResolver
提供されたResourceLoader
を使用してPathMatchingResourcePatternResolver
を作成します。ClassLoader アクセスは、スレッドコンテキストクラスローダーを介して行われます。
- パラメーター:
resourceLoader
-ResourceLoader
を使用してルートディレクトリと実際のリソースをロードします
PathMatchingResourcePatternResolver
- パラメーター:
classLoader
- クラスパスリソースをロードする ClassLoader、または実際のリソースアクセス時にスレッドコンテキストクラスローダーを使用するためのnull
- 関連事項:
メソッドの詳細
getResourceLoader
このパターンリゾルバーが動作するResourceLoader
を返します。getClassLoader
インターフェースからコピーされた説明:ResourceLoader
このResourceLoader
で使用されるClassLoader
SE を公開します。ClassLoader
に直接アクセスする必要があるクライアントは、スレッドコンテキストClassLoader
に依存するのではなく、ResourceLoader
を使用して均一な方法でアクセスできます。- 次で指定:
- インターフェース
ResourceLoader
のgetClassLoader
- 戻り値:
ClassLoader
(システムClassLoader
にさえアクセスできない場合は、null
のみ)- 関連事項:
setPathMatcher
このリソースパターンリゾルバーに使用するPathMatcher
実装を設定します。デフォルトは
AntPathMatcher
です。- 関連事項:
getPathMatcher
このリソースパターンリゾルバーが使用するPathMatcher
を返します。getResource
インターフェースからコピーされた説明:ResourceLoader
指定されたリソースの場所のResource
ハンドルを返します。ハンドルは常に再利用可能なリソース記述子であり、複数の
InputStreamSource.getInputStream()
呼び出しを許可する必要があります。- 完全修飾 URL (例: "file:C:/test.dat"") をサポートする必要があります。
- クラスパス疑似 URL (例: "classpath:test.dat") をサポートする必要があります。
- 相対ファイルパス (例: "WEB-INF/test.dat") をサポートする必要があります。(これは実装固有であり、通常は ApplicationContext 実装によって提供されます。)
Resource
ハンドルは、既存のリソースを意味するものではないことに注意してください。存在を確認するには、Resource.exists()
を呼び出す必要があります。- 次で指定:
- インターフェース
ResourceLoader
のgetResource
- パラメーター:
location
- リソースの場所- 戻り値:
- 対応する
Resource
ハンドル (非null
) - 関連事項:
getResources
インターフェースからコピーされた説明:ResourcePatternResolver
指定されたロケーションパターンをResource
オブジェクトに解決します。同じ物理リソースを指すリソースエントリの重複は、できる限り避ける必要があります。結果にはセマンティクスが設定されている必要があります。
- 次で指定:
- インターフェース
ResourcePatternResolver
のgetResources
- パラメーター:
locationPattern
- 解決する位置パターン- 戻り値:
- 対応する
Resource
オブジェクト - 例外:
IOExceptionSE
- I/O エラーの場合
clearCache
public void clearCache()ローカルリソースキャッシュをクリアし、キャッシュされたすべての classpath/jar 構造を削除します。- 導入:
- 6.2
findAllClassPathResources
ClassLoader を介して、指定された場所のすべてのクラスの場所リソースを検索します。doFindAllClassPathResources(String)
へのデリゲート。- パラメーター:
location
- クラスパス内の絶対パス- 戻り値:
- リソース配列としての結果
- 例外:
IOExceptionSE
- I/O エラーの場合- 関連事項:
doFindAllClassPathResources
構成されたClassLoader
を介して、指定されたパスを持つすべてのクラスパスリソースを検索します。findAllClassPathResources(String)
によって呼び出されます。- パラメーター:
path
- クラスパス内の絶対パス (先行スラッシュは決してありません)- 戻り値:
- 一致する Resource インスタンスの可変セット
- 例外:
IOExceptionSE
- 導入:
- 4.1.1
convertClassLoaderURL
構成されたClassLoader
から返された指定された URL をResource
に変換し、パターンなしのパス検索に適用します (findAllClassPathResources(java.lang.String)
を参照)。6.0.5 の時点で、デフォルト実装は、「ファイル」プロトコルの場合は
FileSystemResource
を作成し、それ以外の場合はUrlResource
を作成し、同じリソースレイアウト内のパターンベースのクラスパストラバーサルの結果と一致し、モジュールパス検索の結果と一致します。- パラメーター:
url
- 構成された ClassLoader から返された URL- 戻り値:
- 対応する Resource オブジェクト
- 関連事項:
addAllClassLoaderJarRoots
protected void addAllClassLoaderJarRoots(@Nullable ClassLoaderSE classLoader, SetSE<Resource> result) すべてのURLClassLoader
SE URL で jar ファイル参照を検索し、jar ファイルコンテンツのルートへのポインターの形式で、指定されたリソースのセットにそれぞれを追加します。- パラメーター:
classLoader
- 検索する ClassLoader (その祖先を含む)result
- jar ルートを追加するリソースのセット- 導入:
- 4.1.1
addClassPathManifestEntries
Class-Path
マニフェストエントリ (システムクラスローダーによってjava.class.path
JVM システムプロパティに追加される) から jar ファイル参照を特定し、それぞれを jar ファイルコンテンツのルートへのポインタの形式で指定されたリソースのセットに追加します。- パラメーター:
result
- jar ルートを追加するリソースのセット- 導入:
- 4.3
findPathMatchingResources
Ant スタイルのPathMatcher
を介して、指定された場所のパターンに一致するすべてのリソースを検索します。OSGi バンドル、JBoss VFS、jar ファイル、zip ファイル、ファイルシステムのリソースをサポートします。
- パラメーター:
locationPattern
- 一致する場所のパターン- 戻り値:
- リソース配列としての結果
- 例外:
IOExceptionSE
- I/O エラーの場合- 関連事項:
determineRootDir
指定された場所のルートディレクトリを決定します。ファイルマッチングの開始点を決定するために使用され、ルートディレクトリの場所を解決して
getResources(String)
に渡し、その場所の残りの部分をサブパターンとして使用します。たとえば、ロケーション "/WEB-INF/*.xml" に対して "/WEB-INF/" を返します。
- パラメーター:
location
- チェックする場所- 戻り値:
- ルートディレクトリを示す場所の部分
- 関連事項:
resolveRootDirResource
指定されたルートディレクトリリソースを解決してパスを照合します。デフォルトでは、
findPathMatchingResources(String)
は、Equinox OSGi の "bundleresource:" および "bundleentry:" URL を、Spring の標準 jar ファイルトラバーサルアルゴリズムを使用してトラバースされる標準 jar ファイル URL に解決します。カスタム解決の場合は、このテンプレートメソッドをオーバーライドし、提供されたリソースハンドルをそれに応じて置き換えます。
このメソッドのデフォルト実装は、提供されたリソースを変更せずに返します。
- パラメーター:
original
- 解決するリソース- 戻り値:
- 解決されたリソース (提供されたリソースと同一である可能性があります)
- 例外:
IOExceptionSE
- 解決に失敗した場合- 関連事項:
isJarResource
指定されたリソースハンドルが、doFindPathMatchingJarResources(org.springframework.core.io.Resource, java.net.URL, java.lang.String)
メソッドが処理できる jar リソースを示しているかどうかを確認します。findPathMatchingResources(String)
はResourceUtils.isJarURL(URL)
に委譲して、指定された URL が jar ファイル内のリソースを指しているかどうかを判断し、このメソッドをフォールバックとしてのみ呼び出します。このテンプレートメソッドを使用すると、さらに種類の jar のようなリソースを検出できるようになります。たとえば、
instanceof
を介してリソースハンドル型をチェックします。このメソッドのデフォルト実装は
false
を返します。- パラメーター:
resource
- チェックするリソースハンドル (通常、パスのマッチングを開始するルートディレクトリ)- 戻り値:
true
(指定されたリソースハンドルが jar リソースを示している場合)- 例外:
IOExceptionSE
- I/O エラーの場合- 関連事項:
doFindPathMatchingJarResources
protected SetSE<Resource> doFindPathMatchingJarResources(Resource rootDirResource, URLSE rootDirUrl, StringSE subPattern) throws IOExceptionSE Ant スタイルのPathMatcher
を介して、指定された場所のパターンに一致する jar ファイル内のすべてのリソースを検索します。- パラメーター:
rootDirResource
- リソースとしてのルートディレクトリrootDirUrl
- 事前に解決されたルートディレクトリの URLsubPattern
- 一致するサブパターン (ルートディレクトリの下)- 戻り値:
- 一致する Resource インスタンスの可変セット
- 例外:
IOExceptionSE
- I/O エラーの場合- 導入:
- 4.3
- 関連事項:
getJarFile
指定された jar ファイルの URL を JarFile オブジェクトに解決します。doFindPathMatchingFileResources
protected SetSE<Resource> doFindPathMatchingFileResources(Resource rootDirResource, StringSE subPattern) throws IOExceptionSE Ant スタイルのPathMatcher
を介して、指定されたルートディレクトリのファイルシステム内で、指定された場所のサブパターンに一致するすべてのリソースを検索します。- パラメーター:
rootDirResource
- リソースとしてのルートディレクトリsubPattern
- 一致するサブパターン (ルートディレクトリの下)- 戻り値:
- 一致する Resource インスタンスの可変セット
- 例外:
IOExceptionSE
- I/O エラーの場合- 関連事項:
findAllModulePathResources
モジュールパスで見つかったすべての一致するリソースについて、指定された場所のパターンをResource
オブジェクトに解決します。位置パターンは、
"com/example/config.xml"
などの明示的なリソースパス、または構成されたPathMatcher
を使用して照合される"com/example/**/config-*.xml"
などのパターンである場合があります。- パラメーター:
locationPattern
- 解決する位置パターン- 戻り値:
- 対応する
Resource
オブジェクトを含む変更可能なSet
- 例外:
IOExceptionSE
- I/O エラーの場合- 導入:
- 6.0
- 関連事項: