我们知道我们可以覆盖系统 类加载器:
java -Djava.system.class.loader=com.test.MyClassLoader xxx
那么,既然 com.test.MyClassLoader
本身就是一个类,它是由谁加载的呢?
我们如何获得这个“元”类加载器的类文件?
原文由 James.Xu 发布,翻译遵循 CC BY-SA 4.0 许可协议
我们知道我们可以覆盖系统 类加载器:
java -Djava.system.class.loader=com.test.MyClassLoader xxx
那么,既然 com.test.MyClassLoader
本身就是一个类,它是由谁加载的呢?
我们如何获得这个“元”类加载器的类文件?
原文由 James.Xu 发布,翻译遵循 CC BY-SA 4.0 许可协议
Bootstrap 类加载器 是所有 类加载 器的父级,并加载 JRE 的 lib 目录中的标准 JDK 类(rt.jar 和 i18n.jar)。所有 java.*
类都由这个 _类加载器加载_。
扩展类加载器 是引导类加载器的直接子类。该类加载器在 JRE 的 lib\ext
目录中加载类。
System-Classpath 类加载器 是 Extensions 类加载器的直接子类。它加载由 CLASSPATH
环境变量指定的类和 jar
您可以尝试通过 java.system.class.loader
属性注入自定义类加载器(参见 ClassLoader#getSystemClassLoader )。
默认系统类加载器 是 MyClassLoader 实例的父级。
原文由 amicngh 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
来自
ClassLoader.getSystemClassLoader()
的 Javadoc默认系统类加载器本身特定于 JVM 实现。