在Java中修改默认类加载器的行为

我正在尝试使用自定义逻辑加载单个类(即,我想用自定义版本替换我的库中的类的实现)。

我想创建自己的自定义类加载器,它代理默认的类加载器。 但是,看起来我的默认类加载器: sun.misc.Launcher.AppClassLoader不可见 - 这意味着我无法扩展它。

我们非常感谢任何用于创建单个类加载器的解决方案,该类加载器足够强大,可以复制现有类加载器的行为,同时在一个特定类中进行子类化。

请注意,我试过使用

Thread current = Thread.currentThread();
current.setContextClassLoader(newOne);

但是,这似乎不起作用,即线程中加载的类不总是触发我的自定义类加载器。


CONTEXT

我想调用“new LibraryClass()”来使用这个类的自定义实现 - 其中“new ...”调用位于不受我控制的jar文件中。


所以,我认为你想用自定义版本替换LibraryClass ,使用相同的完全限定名称,对吧?

如果原始LibraryClass已经在类路径中,由于类加载器层次结构(请参阅Java类加载机制),将无法使用自定义类加载器执行此操作。

一种可能的解决方案是将包含自定义LibraryClass的jar放在类路径的开头。 然后,您的自定义类将被加载为原始类。

如果LibraryClass是引导类或扩展类,这将不起作用。

链接地址: http://www.djcxy.com/p/44393.html

上一篇: Modifying behaviour of default classloader in Java

下一篇: ant delete task with wildcard not working