【发布时间】:2011-09-30 07:54:22
【问题描述】:
不知道Class.getResource()和ClassLoader.getResource()有什么区别?
edit:我特别想知道文件/目录级别是否涉及任何缓存。如“目录列表是否缓存在 Class 版本中?”
AFAIK 以下应该基本上做同样的事情,但他们不是:
getClass().getResource()
getClass().getClassLoader().getResource()
我在摆弄一些报告生成代码时发现了这一点,该代码从该目录中的现有文件在WEB-INF/classes/ 中创建一个新文件。使用 Class 中的方法时,我可以使用 getClass().getResource() 找到部署时存在的文件,但是在尝试获取新创建的文件时,我收到了一个空对象。浏览目录清楚地表明新文件在那里。文件名前面带有正斜杠,如“/myFile.txt”。
另一方面,getResource() 的 ClassLoader 版本确实找到了生成的文件。从这个经验来看,似乎对目录列表进行了某种缓存。我说得对吗?如果是的话,这是在哪里记录的?
来自API docsClass.getResource()
找到资源 有一个给定的名字。规则为 搜索与 a 相关的资源 给定的类由 定义类的类加载器。 这个方法委托给这个对象的 类加载器。如果这个对象是 由引导类加载器加载, 该方法委托给 ClassLoader.getSystemResource(java.lang.String)。
对我来说,这读作“Class.getResource 真的在调用它自己的类加载器的 getResource()”。这与getClass().getClassLoader().getResource() 相同。但显然不是。有人可以为我提供一些关于这件事的启示吗?
【问题讨论】:
标签: java classloader getresource