4.3 Built-in Resource implemetations


4.3 Built-in Resource implemetations

SpringにバンドルされているResourceの実装クラスについて。

4.3.1 UrlResource

java.net.URLをラップしており、URLを介して取得できるファイルや、HTTPリソース、FTPリソースなどを取得するために用いる。URLは一般的なURL形式のの文字列で表現される。file:の場合はファイルシステムのパス。http:はHTTTPプロトコルでアクセスするリソース。ftp:の場合はftpでアクセスするリソース、等。

UrlResourceは普通はコンストラクタでインスタンスを生成する。ただしパスを指定する文字列を指定するAPIによって暗黙的に生成することがある。(@See ResourdeLoader)
この場合は、JaavaBeansのPropertyEditorがどのResourceを生成するかを決定する。もしパスを指定する文字列にclasspath:などといったprefixが含まれている場合は、
4.3.2以降に述べるprefixに該当するResourceクラスのインスタンスを生成する。該当するものがない場合はURL文字列であるとみなしUrlResourceのインスタンスを生成する。

4.3.2 ClassPathResource

クラスパスからリソース取得するときに使用する。現在のスレッドのContextClasssLoaderからの取得、指定されたクラスローダからの取得、指定したクラスをロードしたクラスローダからの取得の3つが可能。Resourceのシグニチャ上はFileを扱うことも可能になっているが、ClassPathResourceはFileとして扱う事はできないので常にjava.net.URLとして扱うソリューションとなる。(日本語見直したほうが)

UrlResource同様、通常はコンストラクタでインスタンスを生成する。パスを指定する文字列によって暗黙的に生成する場合は、prefixがclasspath:である場合にClassPathResourceがインスタンス化される。

4.3.3 FileSystemResource

ファイルもしくはファイルパスを指定してリソースを取得する場合に使用する。

4.3.4 ServletContextResource

Webアプリケーションのルートディレクトリからの相対パスでリソースを取得する場合に使用する。

このクラスを使った場合、URLによるリソースの取り扱いは常に可能だが、Fileによる取り扱いは対象のWARがファイルシステム上に展開されているかどうかで決まる。
どちらにせよ、対象のリソースにどのようにアクセスするかはサービレットコンテナの実装に依存する。

4.3.5 InputStreamResource

InputStreamを指定するリソースの実装クラス。対応するリソースが他にない場合に使用する。普通はこれは使いません。

4.3.6 ByteArrayResource

バイト配列を指定するリソースの実装クラス。すでに存在するバイナリ(バイト配列)からリソースを復元する場合に使用する。