如何在Java中更改默认类装入器?
假设我有三个类,例如。例如,A 类。类 B 和示例。类加载器。ClassA打印出HelloWorld和ClassB导入示例。ClassA 并调用其 main() 方法。如果我这样做:
java -cp Example.jar -Djava.system.class.loader=example.类加载器示例。A类
它工作并使用我的类加载器。但是,如果我这样做:
java -cp Example.jar -Djava.system.class.loader=example.类加载器示例。B类
ClassB 使用我的类装入器,但 ClassA(由 ClassB 导入)是使用缺省类装入器装入的。
有没有办法强制Java始终使用我的类装入器(除非显式指定了另一个类装入器)?
编辑:感谢Paŭlo Ebermann在下面的回答,我认为问题在于我正在调用父类加载器(URLClassLoader)来加载我不需要触摸的类,而那些加载的类将其设置为上下文类加载器,因此从它导入的类使用我的自定义加载器的父类加载器。(令人困惑,抱歉)现在,我可以通过手动读取每个类来使其工作,但是由于我直接复制了URLClassLoader的代码,因此它似乎是多余的。有没有办法告诉父类装入器查找并定义类,但将类的上下文类装入器设置为您的自定义类装入器?