[英]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.