我想知道Class.getResource()和ClassLoader.getResource()之间的区别是什么?
编辑:我特别想知道文件/目录级别是否涉及缓存。如“目录列表是否缓存在类版本中?”
我认为下面这些应该做同样的事情,但它们不是:
getClass().getResource()
getClass().getClassLoader().getResource()
我在摆弄一些报告生成代码时发现了这一点,这些代码从WEB-INF/classes/目录中的现有文件创建了一个新文件。当使用来自Class的方法时,我可以使用getClass(). getresource()找到部署时存在的文件,但当试图获取新创建的文件时,我收到了一个空对象。浏览目录会清楚地显示新文件在那里。文件名以斜杠开头,如"/myFile.txt"。
另一方面,getResource()的ClassLoader版本确实找到了生成的文件。从这个经验来看,似乎有某种目录列表的缓存正在进行。我说得对吗?如果是的话,这在哪里有记录?
来自Class.getResource()上的API文档
寻找资源 有一个名字。的规则 查找关联的资源 类实现 定义类的类装入器。 此方法委托给该对象的方法 类装入器。如果这个对象是 由引导类装入器装入, 方法委托给 ClassLoader.getSystemResource(以)。
对我来说,这就是“阶级”。getResource实际上是调用它自己的类加载器的getResource()”。这将与执行getClass(). getclassloader (). getresource()相同。但事实显然并非如此。有人能给我一些关于这件事的说明吗?