Class.getResource()
との違いは何ClassLoader.getResource()
ですか?
編集:特に、ファイル/ディレクトリレベルでキャッシュが関係しているかどうかを知りたいです。「ディレクトリリストはクラスバージョンにキャッシュされていますか?」のように。
以下は基本的に同じことを行う必要がありますが、そうではありません。
getClass().getResource()
getClass().getClassLoader().getResource()
WEB-INF/classes/
そのディレクトリ内の既存のファイルから新しいファイルを作成するレポート生成コードをいじったときに、これを発見しました。Classのメソッドを使用すると、を使用してデプロイ時に存在していたファイルを見つけることができましたがgetClass().getResource()
、新しく作成されたファイルをフェッチしようとすると、nullオブジェクトを受け取りました。ディレクトリを参照すると、新しいファイルがそこにあることがはっきりとわかります。ファイル名には、「/myFile.txt」のようにスラッシュが付加されています。
一方、のClassLoader
バージョンではgetResource()
、生成されたファイルが見つかりました。この経験から、ディレクトリリストのある種のキャッシュが行われているようです。私は正しいですか、もしそうなら、これはどこに文書化されていますか?
上のAPIドキュメントからClass.getResource()
指定された名前のリソースを検索します。特定のクラスに関連付けられたリソースを検索するためのルールは、クラスの定義クラスローダーによって実装されます。このメソッドは、このオブジェクトのクラスローダーに委任します。このオブジェクトがブートストラップクラスローダーによってロードされた場合、メソッドはClassLoader.getSystemResource(java.lang.String)に委任します。
私には、これは「Class.getResourceが実際に独自のクラスローダーのgetResource()を呼び出している」と読みます。これは、を行うのと同じgetClass().getClassLoader().getResource()
です。しかし、明らかにそうではありません。誰かが私にこの問題についての照明を提供してくれませんか?