【发布时间】:2011-01-20 15:34:27
【问题描述】:
按照最佳实践,我使用 Thread.currentThread().getContextClassLoader().getResourceAsStream 在 Web 应用程序中加载资源(如文本文件或 xml 文件),而不是通过文件 API。
但是,这样做的缺点是,如果磁盘上的资源发生更改,则对 getResourceAsStream 的后续调用会无限期地返回旧版本。
不过,我希望它能够使用新版本。在我的调试器中,我看到类加载器中有一个名为 resourceEntries 的简单 HashMap。使用反射我已经能够删除一个特定的条目,这似乎工作。
但是这种方法很脆弱。
有没有更标准的方法来做到这一点?
【问题讨论】:
-
ClassLoader的确切实现是什么? -
在这种情况下,它是 Tomcat 5 中的
org.apache.catalina.loader.WebappClassLoader。我还没有尝试过更新的 Tomcat 版本,但我只是在 JBoss 中尝试过,它在那里不起作用(如预期的那样) .
标签: java web-applications