В чем разница между Class.getResource () и ClassLoader.getResource ()?

Интересно, в чем разница между Class.getResource () и ClassLoader.getResource () ?"

edit: Я особенно хочу чтобы узнать, задействовано ли какое-либо кеширование на уровне файла / каталога. Как в случае «кэшируются ли списки каталогов в версии класса?»

AFAIK, по сути, следующее должно делать то же самое, но это не так:

getClass().getResource() 
getClass().getClassLoader().getResource()

Я обнаружил это когда возиться с некоторым кодом генерации отчета, который создает новый файл в WEB-INF / classes / из существующего файла в этом каталоге. При использовании метода из класса я мог найти файлы, которые были там при развертывании, используя getClass (). GetResource () , но при попытке получить только что созданный файл я получил нулевой объект. Просмотр каталога ясно показывает, что новый файл существует. Имена файлов были добавлены с косой чертой, как в "/myFile.txt".

" ClassLoader версия getResource () на o другая рука нашла сгенерированный файл. Из этого опыта кажется, что происходит какое-то кеширование списка каталогов. Прав ли я, и если да, то где это задокументировано?

Из документации API на Class.getResource ()

Находит ресурс с заданным именем. Правила для поиск ресурсов, связанных с данный класс реализован определение загрузчика класса. Этот метод делегирует этому объекту загрузчик классов. Если бы этот объект был загружается загрузчиком классов начальной загрузки, метод делегирует ClassLoader.getSystemResource (java.lang.String).

Для меня это читается как «Класс.getResource действительно вызывает getResource () "своего собственного загрузчика классов. Это было бы то же самое, что и выполнение getClass (). getClassLoader (). getResource () . Но, очевидно, это не так. Освещение этого вопроса?

186
задан S.L. Barth - Reinstate Monica 25 July 2012 в 02:47
поделиться