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