Me pregunto cuál es la diferencia entre Class.getResource()
y ClassLoader.getResource()
?¿Cuál es la diferencia entre Class.getResource() y ClassLoader.getResource()?
editar: Especialmente quiero saber si hay algún almacenamiento en caché involucrado en el nivel de archivo/directorio. Como en "¿los listados de directorios están almacenados en caché en la versión Class?"
yo sepa lo siguiente en esencia debería hacer lo mismo, pero no lo son:
getClass().getResource()
getClass().getClassLoader().getResource()
descubrí esto cuando jugando con algún código de generación de informes que crea un nuevo archivo en WEB-INF/classes/
desde un archivo existente en ese directorio . Al usar el método de Class, pude encontrar los archivos que estaban allí en la implementación usando getClass().getResource()
, pero cuando traté de recuperar el archivo recién creado, recibí un objeto nulo. La navegación por el directorio muestra claramente que el nuevo archivo está allí. Los nombres de archivo fueron precedidos por una barra inclinada como en "/myFile.txt".
La versión ClassLoader
de getResource()
encontró el archivo generado. A partir de esta experiencia, parece que hay algún tipo de almacenamiento en caché de la lista de directorios en curso. Estoy en lo correcto, y si es así, ¿dónde está esto documentado?
Desde el API docs en Class.getResource()
encuentra un recurso con un nombre dado. Las reglas para buscando recursos asociados con una clase dada son implementadas por el cargador de clase de definición de la clase. Este método se delega en el cargador de clases de este objeto. Si este objeto era cargado por el cargador de clases de rutina de carga, el método delega en ClassLoader.getSystemResource (java.lang.String).
Para mí, esto dice "Class.getResource realmente está llamando a su propio cargador de clase getResource()". Lo cual sería lo mismo que hacer getClass().getClassLoader().getResource()
. Pero obviamente no es así. ¿Podría alguien darme alguna información sobre este asunto?
Yo también usé Maven e IntelliJ, así que esta es la respuesta en un entorno que se acerca más al mío y tiene una explicación razonable para la pregunta n. ° 2. – oligofren