gpt4 book ai didi

Java 类加载器资源仅对特定实例可见

转载 作者:太空宇宙 更新时间:2023-11-04 10:28:02 27 4
gpt4 key购买 nike

我正在尝试将资源加载到库的运行时中。但在我当前的实现中,只有 URLClassLoader 的非常具体的实例才能看到它。

URLClassLoader classLoader = new URLClassLoader(urls, ClassLoader.getSystemClassLoader());
classLoader.addFile(super.getResource(urlPath));

classLoader.classLoader.getResourceAsStream(path) //works

URLClassLoader secondClassLoader = new URLClassLoader(urls, ClassLoader.getSystemClassLoader());
secondClassLoader.classLoader.getResourceAsStream(path) // doesn't work

另一个问题是,我不知道该库实际使用哪个类加载器作为父类。最好的解决方案是每个类加载器都可以访问资源。

如何确保所有类加载器都可以访问动态加载的资源?

最佳答案

看起来,您有两个选择(尽管两种解决方案的工作原理相似)。

一般解决方案(无自定义类加载器):从应用程序类加载器加载资源。这可以通过确保资源位置包含在应用程序类路径中来实现(将资源保存为应用程序 jar 文件的一部分是实现此目的的一种方法)。

有点复杂(使用自定义类加载器):在这种情况下,您必须确保将资源路径添加到所有自定义类加载器的类路径中。更简单、更简洁的方法是定义一个 super 自定义类加载器并从此 super 加载器继承所有其他类加载器。并将资源加载到 super 类加载器的类路径中。

现在,我希望您了解基本原理:如果给定资源在其父级类路径(递归地)或在其自己的类路径中可见,则类加载器将能够加载该资源。

关于Java 类加载器资源仅对特定实例可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50320574/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com