Qual é a diferença entre Class.getResource () e ClassLoader.getResource ()?

Eu me pergunto qual é a diferença entreClass.getResource() eClassLoader.getResource()?

edit: Eu quero saber especialmente se algum cache está envolvido no nível do arquivo / diretório. Como em "as listagens de diretório estão armazenadas em cache na versão da classe?"

AFAIK, o seguinte deve essencialmente fazer o mesmo, mas não é:

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

Eu descobri isso ao mexer em algum código de geração de relatório que cria um novo arquivo emWEB-INF/classes/ de um arquivo existente nesse diretório. Ao usar o método de Class, pude encontrar arquivos que estavam lá na implantação usandogetClass().getResource(), mas ao tentar buscar o arquivo recém-criado, recebi um objeto nulo. Navegar no diretório mostra claramente que o novo arquivo está lá. Os nomes dos arquivos foram anexados com uma barra como em "/myFile.txt"

OClassLoader versão degetResource(), por outro lado, encontrou o arquivo gerado. A partir dessa experiência, parece que há algum tipo de cache da listagem de diretórios em andamento. Estou certo e, em caso afirmativo, onde isso está documentado?

DeAPI docs emClass.getResource()

Encontra um recurso com um determinado nome. As regras para pesquisar recursos associados a uma determinada classe são implementadas pelo carregador de classes que define a classe. Este método delega para o carregador de classes deste objeto. Se esse objeto foi carregado pelo carregador de classes de autoinicialização, o método delega para ClassLoader.getSystemResource (java.lang.String).

Para mim, é exibido "Class.getResource está realmente chamando getResource () do seu próprio carregador de classe". O que seria o mesmo que fazergetClass().getClassLoader().getResource(). Mas obviamente não é. Alguém poderia me fornecer alguma iluminação sobre este assunto?

questionAnswers(7)

yourAnswerToTheQuestion