我有一个自定义jar类加载器,它使用URLCLassLoader . 我必须从数据库中读取jar内容并加载它们 . 有几个与此相关的问题 .
-
我可以以某种方式从字节流中加载所有类,而不是先将jar内容从数据库保存到临时文件,并将file:// URL提供给URL类加载器吗?
-
如果上述问题的答案是肯定的,那么类加载器会确保它一次从字节流中读取所有类文件和资源,以避免以后出现ClassNotFoundError .
-
如果答案是Q1 . 没有 . 然后通过我的方法,我从数据库字节流创建了一个 temporary .jar,并将文件:// URL提供给URLClassloader . URLClassloader是否确保该URL上的文件是临时的,在被使用之前不会被销毁,以避免ClassNotFoundException?
对上述整体问题的任何其他解决方案也是受欢迎的 . 提前致谢 .
1 回答
您可以使用自己的
URLStreamHandler
构造URL
. 但是,URLClassLoader
的正常实现会将内容保存到临时文件并使用JarFile
API .如果创建临时文件,则在UNIX系统上应该能够在打开后删除 . 在Windows上,您需要保留它,直到您完成类加载器 . 从Java SE 7开始,您可以关闭
URLClassLoader
.