私は違いが間にあるのだろうか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()
です。しかし、明らかにそうではありません。誰かが私にこの問題についていくつかの照明を提供してくれませんか?