Цікаво, в чому різниця між Class.getResource()
і ClassLoader.getResource()
?
редагувати: Я особливо хочу знати, чи є кешування на рівні файлів / директорій. Як у "чи є кешовані списки каталогів у версії Class?"
AFAIK наступні фактично повинні робити те саме, але вони не є:
getClass().getResource()
getClass().getClassLoader().getResource()
Я виявив це, коли знайшов якийсь код генерації звітів, який створює новий файл WEB-INF/classes/
із існуючого файлу в цьому каталозі. Під час використання методу з класу я міг знайти файли, які були там при розгортанні, використовуючи getClass().getResource()
, але, намагаючись отримати новий файл, я отримав нульовий об'єкт. Перегляд каталогу чітко показує, що новий файл є. Назви файлів були попередньо накресленими внизу, як у "/myFile.txt".
З іншого боку, ClassLoader
версія getResource()
знайшла створений файл. З цього досвіду складається враження, що відбувається якесь кешування списку каталогів. Я правий, і якщо так, то де це документально підтверджено?
З API документації поClass.getResource()
Знаходить ресурс із заданим іменем. Правила пошуку ресурсів, пов'язаних з даним класом, реалізуються визначальним завантажувачем класу класу. Цей метод делегує завантажувача класу цього об'єкта. Якщо цей об'єкт був завантажений завантажувачем класу завантажувальної програми, метод делегується до ClassLoader.getSystemResource (java.lang.String).
Для мене це означає, що "Class.getResource насправді викликає getResource ()" власного завантажувача. Що було б те саме, що робити getClass().getClassLoader().getResource()
. Але це, очевидно, немає. Невже хтось може, будь-ласка, надати мені трохи висвітлення цього питання?