问题描述
https://docs.oracle.com/javase/9/docs/api/java/lang/ClassLoader.html
Java运行时具有以下内置的类加载器:
Bootstrap类加载器。它是虚拟机的内置类加载器,通常表示为null,并且没有父级。
平台类加载器。所有平台类对于平台类加载器都是可见的,可以用作ClassLoader实例的父级。平台类包括Java SE平台API,它们的实现类以及由平台类加载器或其祖先定义的特定于JDK的运行时类。
要允许升级/覆盖定义到平台类加载器的模块,并且升级的模块读取定义到平台加载器及其祖先以外的类加载器的模块,则平台类加载器可能必须委托对于其他类加载器,例如应用程序类加载器。换句话说,平台类加载器可能对平台类加载器及其祖先以外的类加载器定义的命名模块中的类。
系统类加载器。它也称为应用程序类加载器,与平台类加载器不同。系统类加载器通常用于在应用程序类路径,模块路径和特定于JDK的工具上定义类。平台类加载器是所有平台类都可见的系统类加载器的父代或祖先。
问题:
1。如何覆盖或更新模块?
2。它似乎有两个Application类加载器(例如appclassloaders A,appclassloaders B),并且A可以通过它们的公共父Platform类加载器来加载从B加载的类。像: A-> Platformclassloader-> B-> X.class。但是,由于在JVM进程中是一个单例,因此怎么可能有两个Application类加载器?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)