Saya bertanya-tanya apa perbedaan antara Class.getResource()
dan ClassLoader.getResource()
?
sunting: Saya terutama ingin tahu apakah ada caching yang terlibat pada level file / direktori. Seperti pada "apakah daftar direktori di-cache dalam versi Kelas?"
AFAIK pada dasarnya harus melakukan hal yang sama, tetapi tidak:
getClass().getResource()
getClass().getClassLoader().getResource()
Saya menemukan ini ketika mengutak-atik beberapa kode pembuatan laporan yang membuat file baru WEB-INF/classes/
dari file yang ada di direktori itu. Ketika menggunakan metode dari Class, saya bisa menemukan file yang ada di deployment menggunakan getClass().getResource()
, tetapi ketika mencoba untuk mengambil file yang baru dibuat, saya menerima objek nol. Menjelajahi direktori dengan jelas menunjukkan bahwa file baru ada di sana. Nama file diawali dengan garis miring ke depan seperti pada "/myFile.txt".
The ClassLoader
versi getResource()
di sisi lain menemukan file yang dihasilkan. Dari pengalaman ini tampaknya ada semacam caching dari daftar direktori yang terjadi. Apakah saya benar, dan jika demikian, di mana ini didokumentasikan?
Dari dokumentasi API padaClass.getResource()
Menemukan sumber daya dengan nama yang diberikan. Aturan untuk mencari sumber daya yang terkait dengan kelas yang diberikan diimplementasikan oleh pemuat kelas mendefinisikan kelas. Metode ini mendelegasikan ke pemuat kelas objek ini. Jika objek ini dimuat oleh bootstrap class loader, metode mendelegasikan ke ClassLoader.getSystemResource (java.lang.String).
Bagi saya, ini berbunyi "Class.getResource benar-benar memanggil getResource ()" classloadernya sendiri. Yang akan sama dengan melakukan getClass().getClassLoader().getResource()
. Tapi jelas tidak. Bisakah seseorang tolong berikan saya iluminasi tentang hal ini?