Java Jar文件作为流类加载器

Java Jar文件作为流类加载器,java,classloader,Java,Classloader,当URL类加载器只接受URL或文件路径时,如何从数据库中存储为blob的jar文件加载类?从java.lang.ClassLoader实现您自己的子类,该子类从数据库加载 也许这篇文章有助于开始: }如果你看一下代码,你就可以开始了 如果您在谷歌上搜索Jar类加载器,还有其他可用资源。 您需要修改代码以传入从DB中的BLOB获得的ByTestStream。编写自己的类加载器可能会让人非常困惑,特别是对于初学者。我最近需要动态加载一些jar,发现它们非常有用。它解释了如何使用ResourceFin

当URL类加载器只接受URL或文件路径时,如何从数据库中存储为blob的jar文件加载类?

java.lang.ClassLoader
实现您自己的子类,该子类从数据库加载

也许这篇文章有助于开始:


}

如果你看一下代码,你就可以开始了

如果您在谷歌上搜索Jar类加载器,还有其他可用资源。

您需要修改代码以传入从DB中的BLOB获得的ByTestStream。

编写自己的类加载器可能会让人非常困惑,特别是对于初学者。我最近需要动态加载一些jar,发现它们非常有用。它解释了如何使用ResourceFinder,一个来自ApacheXbean的类或其他东西。它是一个文件,您可以轻松地将其放入项目中

对您的情况最有利的是,尽管通过URL加载,
readContents
函数(用于实际加载jar文件)如下所示:

private String readContents(URL resource) throws IOException {
    InputStream in = resource.openStream();
    BufferedInputStream reader = null;
    StringBuilder sb = new StringBuilder();

    try {
        reader = new BufferedInputStream(in);

        int b = reader.read();
        while (b != -1) {
            sb.append((char) b);
            b = reader.read();
        }

        return sb.toString().trim();
    } finally {
        try {
            in.close();
            reader.close();
        } catch (Exception e) {
        }
    }
}
可以很容易地对其进行修改,以处理您拥有的任何流/blob。 我确信,对类进行一些小的更改可以使它完全符合您的要求,或者至少可以为您指明正确的方向。从头开始编写类加载器并不是一件有趣的事情

编辑:
你知道,我刚刚又看了一眼,我不太确定你能不能只对ResourceFinder做一些小改动就成功了。不过,还是要仔细看看,看看能从中得到什么。

实现自己的类加载器是显而易见的答案。取决于您需要如何使用可能有问题的类。另一个鲜为人知的选择是实现自己的url处理程序。您可以提出一个定制的url方案,比如
“db:///”
之类的。您可以实现一个自定义的URLStreamHandler,详细信息。

java.security.SecureClassLoader
可能是一个更好的基础。不过,这并不能真正解决这个问题。这也不会加载jar文件——它只查看其条目。
private String readContents(URL resource) throws IOException {
    InputStream in = resource.openStream();
    BufferedInputStream reader = null;
    StringBuilder sb = new StringBuilder();

    try {
        reader = new BufferedInputStream(in);

        int b = reader.read();
        while (b != -1) {
            sb.append((char) b);
            b = reader.read();
        }

        return sb.toString().trim();
    } finally {
        try {
            in.close();
            reader.close();
        } catch (Exception e) {
        }
    }
}