Tag: 类加载器

在类加载器中投掷?

我该如何做到这一点: class Foo { public static Foo get() throws Exception { ClassLoader cl = new URLClassLoader(new URL[]{"foo.jar"}, null); // Foo.class is in foo.jar return (Foo)cl.loadClass("Foo").newInstance(); // fails on class cast } } 我需要的是JVM从cl中考虑Foo实例,就好像它是执行代码的类加载器中的Foo实例。 我已经看到了这些方法,没有一个适合我(上面的例子是一个玩具的例子): 通过作为调用代码和创build的类加载器的父类的类加载器加载类(或单独的接口) 序列化和反序列化对象。

Java – 如何加载同一类的不同版本?

我已经阅读了很多关于Java类加载器的内容,但到目前为止,我还是无法为这个简单的问题find答案: 我在jars v1.jar和v2.jar中有两个版本的com.abc.Hello.class 。 我想在我的应用程序中使用两者。 这样做最简单的方法是什么? 我并不期望这么简单,但是沿着这些方向的东西会很棒: Classloader myClassLoader = [magic that includes v1.jar and ignores v2.jar] Hello hello = myclassLoader.load[com.abc.Hello] 而在另一个class上: Classloader myClassLoader = [magic that includes v2.jar and ignores v1.jar] Hello hello = myclassLoader.load[com.abc.Hello] 我想避免使用OSGi。

在Java中,是否有可能知道一个类是否已经被加载?

是否有可能知道一个Java类是否已经加载, 而不尝试加载它? Class.forName尝试加载类,但我不希望这种副作用。 有另一种方法吗? (我不想重写类加载器,我正在寻找一个相对简单的方法。)

从lib目录加载jar文件的顺序

任何人都可以解释从Tomcat中的lib目录加载jar文件的顺序吗? 是否按字母顺序? 随机? 或者其他一些命令?

如何列出在特定的类加载器中加载的所有类

出于debugging的原因和好奇心,我希望列出加载到特定类加载器的所有类。 看到类加载器的大多数方法都受到保护,那么完成我所需要的最佳方法是什么? 谢谢!

在JAR中加载属性文件?

我遇到麻烦时,我的Web应用程序所依赖的一个jar子试图从jar中加载属性文件。 这是jar中的代码。 static { Properties props = new Properties(); try { props.load(ClassLoader.getSystemResourceAsStream("someProps.properties")); } catch (IOException e) { e.printStackTrace(); } someProperty = props.getProperty("someKey"); } 属性文件位于Maven项目的“src / main / resources”目录下。 当我在Eclipse的junittesting中运行这个代码时,它执行得很好。 当使用Maven将项目构build到jar中,并将其作为依赖项包含在webb应用程序中时,将无法find属性文件。 我知道属性文件是在依赖jar的基础目录,我不知道如何解决这个问题。 请帮忙!

如何在Java中创build父代最后/以子代为先的ClassLoader,或者如何覆盖已经在父代CL中加载的旧Xerces版本?

我想创build一个父 – 最后/孩子优先的类加载器,例如一个类加载器将首先在子类loder中寻找类,然后委托给它的父类ClassLoader来search类。 澄清: 我现在知道,要获得完整的ClassLoading分离,我需要使用像URLClassLoader传递null作为它的父母感谢这个答案我上一个问题 但目前的问题来帮助我解决这个问题: 我的代码+从属的jar被加载到一个现有的系统中,使用一个ClassLoader来设置System的ClassLoader,因为它的父类(URLClassLoader) 该系统使用了一些与我所需要的版本不兼容的版本库(例如旧版本的Xerces,不允许我运行我的代码) 如果运行独立,我的代码运行得很好,但是如果从ClassLoader运行,则代码将失败 Howerver我确实需要访问父ClassLoader中的许多其他类 因此,我想允许我用我自己覆盖父类加载器“jars”:如果在子类加载器中find我调用的类(例如,我用自己的jar提供了更新版本的Xerces,而不是一个用户由加载我的代码和jar子的ClassLoader。 这里是系统的代码加载我的代码+jar子(我不能改变这一个) File addOnFolder = new File("/addOns"); URL url = addOnFolder.toURL(); URL[] urls = new URL[]{url}; ClassLoader parent = getClass().getClassLoader(); cl = URLClassLoader.newInstance(urls, parent); 这里是“我的”代码(完全采用Flying Sauser“Hello World”代码演示): package flyingsaucerpdf; import java.io.*; import com.lowagie.text.DocumentException; import org.xhtmlrenderer.pdf.ITextRenderer; public class FirstDoc { public static void main(String[] args) throws […]

单个类与几个不同的类加载器

例如我有静态字段instance类Singleton : public class Singleton { private static Singleton instance; // other code, construct, getters, no matter } 我可以用两个不同的类加载器加载这个类。 我怎么能避免它? 这是不安全和危险的。 此外,如果我将实例设置为null,它是否将设置为null这两个类? Singleton singleton = Singleton.getInstance(); singleton = null;

是否有可能在运行时从Android应用程序dynamic加载库?

有没有什么办法让Android应用程序在运行时下载和使用Java库? 这里是一个例子: 想象一下,应用程序需要根据input值进行一些计算。 应用程序要求input这些值,然后检查所需的Classe或Method是否可用。 如果没有,则连接到服务器,下载所需的库,并在运行时加载它以使用reflection技术调用所需的方法。 实现可能会根据各种标准(例如正在下载库的用户)而改变。

线程的上下文类加载器和普通的类加载器之间的区别

线程的上下文类加载器和普通的类加载器有什么区别? 也就是说,如果Thread.currentThread().getContextClassLoader()和getClass().getClassLoader()返回不同的类加载器对象,哪一个会被使用?