春のリソース
アウトライン
日々のプログラム開発では、外部リソースを扱う非常に複雑なもので、私たちはその上のURLリソース、ファイルのリソースクラスパスに関連するリソースとに対処する必要があるかもしれません。そして、さまざまなURL接頭辞のためのJava .net.URLクラスと標準ハンドラ内のJavaは、基礎となるリソースへのすべてのアクセスには十分ではありません。リソースは、システムの複雑さを増大させる別のインターフェイスを使用する必要がある様々な対処します。
この春、リソース・インターフェースは、一貫性のある統一されたこれらの基礎となるリソースへのアクセスを提供します。リソースインタフェースは、基礎となるリソースへのアクセス抽象化へのより強力なインターフェースです。
public interface Resource extends InputStreamSource {
boolean exists();
boolean isOpen();
URL getURL() throws IOException;
File getFile() throws IOException;
Resource createRelative(String relativePath) throws IOException;
String getFilename();
String getDescription();
}
リソースはInputStreamSource以下のコンテンツがInputStreamSourceで継承しました
public interface InputStreamSource {
InputStream getInputStream() throws IOException;
}
分析方法:
- getInputStream():各コールは、リソース入力ストリームのバイトに対応するストリームを返し、発呼者は、使用後のリソースをクローズする必要があります。
- ()が存在する:現在のリソースが存在する場合はtrueを返します。
- いるisOpen():担当者のリソースリソースがすでに開かれている返します。それがtrueを返した場合、唯一のInputStreamを何度も読み、[リソースのリークを回避するために閉じることはできません一度読むことができます。すべての共通の一般のリソースの実装はfalseを返します。
- getURL()は:リソースjava.util.URLリソースに対応する代表オブジェクトを返します。
- getFileは():リソースjava.io.Fileのリソースに対応する代表オブジェクトを返します。
- createRelative(文字列relativePath):現在のリソースとリソースを作成するために使用されるような現在のリソースファイルリソースの代表として、リソースを表す「D:/テスト/」は:/テストcreateRelative(「test.txtの」)は、リソース・テーブル・ファイル」Dを返すあります/test.txt「リソースリソース。
- getFilename():リソースは、ファイルパスに対応するリソースを表して返します。
- getDescription():リソースは、リソース記述子、リソース(実際のファイル名や実際のURLアドレス)の通常のフルパスを表して返します。
春のフレームワーク自体は非常に広く、それはまた、私たちのプロジェクトで使用することができ、ターゲットリソースを取得するために非常に便利なことができ、リソースを使用しています。
内蔵リソースインターフェース
- UrlResource
- ClassPathResource
- FileSystemResource
- ServletContextResource
- InputStreamResource
- ByteArrayResource
UrlResource
のjava.net.URLをカプセル化しUrlResourceは、そのようなので、上のファイル、HTTPリソース、FTPリソースとして、URLを介してアクセスする任意のオブジェクトにアクセスするために使用することができます。すべてのURL正規化された文字列表現を持っている、URLの種類を示すために、適切な標準化されたURLの接頭辞を使用することが可能です。一般的には、以下のリソースへのアクセスをサポートしています。
- ファイル:パスファイルシステムにアクセスするには
new UrlResource("file:d/xxx.txt");
- HTTP:HTTPプロトコルを介してリソースにアクセスするための
new UrlResource("http://地址");
- FTP:FTPアクセスリソースを通じて
new UrlResource("ftp://地址");
ClassPathResource
ClassPathResourceリソースクラスパスを取得し、それはスレッドコンテキストクラスローダ、ロードする特定のリソース・クラスローダを使用します。クラスパスのクラスパスリソースは、袋またはjarのファイルシステム内に存在します。
ClassPathResource共通のコンストラクタ
public ClassPathResource(String path);
public ClassPathResource(String path, @Nullable ClassLoader classLoader);
public ClassPathResource(String path, @Nullable Class<?> clazz);
- 公共ClassPathResource(文字列のパス):リソースのクラスパスで説明するデフォルトのクラスローダパス
- 公共ClassPathResource(文字列パス、@NullableのClassLoaderクラスローダー):リソース・クラス・パスの指定されたクラスローダパスを使用して
- 公共ClassPathResource(文字列のパス、@Nullableクラスclazz):指定したクラスパスを持つクラスでのみロードパスのリソース
FileSystemResource
FileSystemResourceは実装がサポートしているリソースであるjava.ioとjava.nio.file.Path処理。
ServletContextResource
ServletContextResourceはのServletContextリソースを達成するために、Webアプリケーションのリソースです。GetResourceAsStreamのServletContextのgetResource操作とインターフェイスサーブレットコンテナの操作を簡単にします。
InputStreamResource
InputStreamResourceはInputStreamの認識に基づいている、のInputStreamパラメータが特定のシーン下には資源がないときにのみ使用し、それです。
public InputStreamResource(InputStream inputStream);
public InputStreamResource(InputStream inputStream, @Nullable String description);
ByteArrayResource好み
ByteArrayResourceがするByteArrayInputStreamを作成するために、バイト[リアライズ]配列を与えていることを好みます。
ResourceLoader
リソースResourceLoaderの例は、返されました。
public interface ResourceLoader {
Resource getResource(String location);
}
春のApplicationContext ResourceLoaderを実装
- ClassPathXmlApplicationContext
- FileSystemXmlApplicationContext
- WebApplicationContext
パラメータは接頭辞を呼び出すのgetResource ApplicationContextの実装クラス内のリソースが実行コード以下、リソースのインスタンスApplicationContextのタイプのために返される指定しない場合、ApplicationContextのインスタンスのリソースへのアクセスに使用することができますClassPathXmlApplicationContextです
Resource template = ctx.getResource("some/resource/path/myTemplate.txt");
ClassPathXmlApplicationContext ClassPathResource上記のリターンコードの場合。
同じ方法がFileSystemXmlApplicationContextインスタンスを実行した場合、それはFileSystemResourceを返します。WebApplicationContextのために、それはServletContextResourceを返します。
関係なく、タイプのものをApplicationContextの実装のインスタンスをClassPathResourceの義務的使用:別の方法として、あなたは、クラスパスなどのリソースのプレフィックスを指定することはできません。
Resource template = ctx.getResource("classpath:some/resource/path/myTemplate.txt");
また、他の接頭辞を使用することができます
Resource template = ctx.getResource("file:///some/resource/path/myTemplate.txt");
Resource template = ctx.getResource("https://myhost.com/resource/path/myTemplate.txt");
リソースオブジェクトのポリシーへのgetResourceの文字列パラメータオブジェクト
リソース接頭辞 | 例 | 説明 |
---|---|---|
クラスパス: | クラスパス:COM / myappに/ config.xmlに | クラスパスのクラスパスからロードされました |
ファイル: | ファイル:///data/config.xml | ファイルシステムからURLとしてロード |
http: | HTTPS://myserver/logo.png | URLとしてロード |
(無し) | /data/config.xml | 実施例ApplicationContextのローディング |
ResourceLoaderAware
ザResourceLoaderAwareコールバックインターフェースは、対応のApplicationContext注射を介して特別なインターフェースです。
public interface ResourceLoaderAware {
void setResourceLoader(ResourceLoader resourceLoader);
}
豆の豆タイプがResourceLoaderAwareとして認識されているロード時クラスがインターフェイスResourceLoaderAware、スプリングIoCコンテナを実装する際に、対応するインスタンスsetResourceLoader(ResourceLoader resourceLoader)ApplicationContextのメソッドを呼び出すとのgetResourceを渡す方法のインスタンスを返します
ApplicationContextの建物
ApplicationContextのは、典型的には、リソースのロケーションパスとして文字列または文字列の配列を構築します。パスは、接頭文字列パラメータでない場合には、豆のリソースのインスタンスをロードするのApplicationContextのインスタンスに依存します。例えば、ClassPathXmlApplicationContextを作成する、次の例を考えてみます。
ApplicationContext ctx = new ClassPathXmlApplicationContext("conf/appContext.xml");
Bean内のappContext.xml文書があるため、使用Classpathresourceの、クラスパスからロードされています。
ApplicationContextのワイルドカード建てる
建物のパラメータの正確なパスをのApplicationContextは、クラスパスへのパスを指定できます。confに/ appContext.xml各パスは、リソース対1のマッピングをターゲットにあります。それとも、特殊文字を含めることができます*クラスパス:このメカニズムの用途の1つは、あなたがスタイルのアプリケーションアセンブリに依存する必要がある場合ということです。そして、クラスパス*で使用する場合:接頭辞と同じパスが最終のApplicationContextを作成するために、すべての依存関係は自動的にクラスパスを取得しています。
クラスパス、およびクラスパス*の違い
- クラスパス:ローディング一方と(JARパッケージを含む)のみつのリソース・クラス・パスのために、マッチングのみ、複数のリターン。
- クラスパス*:すべてのリソースが(JARパッケージを含む)のローディングクラスパスを一致させるために追加されました。
クラスパス*::必要性は、すべてのクラスパスを横断するので、負荷時の効率は使用することが可能で、わずかのように比較的悪くなります注意してください。