繁体   English   中英

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

[英]Modifying behaviour of default classloader in Java

我试图使用自定义逻辑加载一个类(即我想用自定义版本替换我的库中的类的实现)。

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

用于创建单个类加载器的任何解决方案都非常有用,它足够强大,可以在一个特定的类中进行修复时复制现有类加载器的行为。

请注意,我尝试过使用

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

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


CONTEXT

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM