java中的系统类加载器如何有用?
我希望系统类加载器接管我的应用程序的类加载。所以,如果我以java中的系统类加载器如何有用?,java,classloader,Java,Classloader,我希望系统类加载器接管我的应用程序的类加载。所以,如果我以 java -Djava.system.class.loader=MyClassLoader Main 我希望Main由MyClassLoader加载,这样我就可以控制应用程序中的类加载。但事实并非如此。Main仍然由默认的系统类加载器(sun.misc.Launcher$AppClassLoader)加载,从Main引用的其他类也是如此。但是,对getSystemClassLoader()的调用将返回MyClassLoader的实例
java -Djava.system.class.loader=MyClassLoader Main
我希望Main由MyClassLoader加载,这样我就可以控制应用程序中的类加载。但事实并非如此。Main仍然由默认的系统类加载器(sun.misc.Launcher$AppClassLoader)加载,从Main引用的其他类也是如此。但是,对getSystemClassLoader()的调用将返回MyClassLoader的实例
这有什么用?由我的自定义系统类加载器加载Main难道没有意义吗?如何控制应用程序的类加载?谁使用getSystemClassLoader()值?如果您只是子类化了
URLClassLoader
,而没有覆盖:
在父类加载器中首次搜索后,将按照为类和资源指定的顺序搜索URL
如果父类加载器可以加载该类,则它会加载该类,并且为该类报告的加载器将是父类加载器。为了还原Java类加载器默认的父类第一加载策略,如果您只是子类化了
URLClassLoader
,而没有重写,则必须重写loadClass
:
在父类加载器中首次搜索后,将按照为类和资源指定的顺序搜索URL
如果父类加载器可以加载该类,则它会加载该类,并且为该类报告的加载器将是父类加载器。为了恢复Java类加载器默认的父类优先加载策略,您必须覆盖
loadClass
必须加载类加载器的某些内容。。。。这就是系统类加载器(它神奇地位于JVM中),您是如何实现类加载器的?你可能会委托给家长吗?好的,你不是从头开始写的,但它仍然是你的类。你必须首先反驳这个假设:你的类加载器正在被调用,但它委托给父类加载器。你能提供一个最小的工作示例吗?请发布你的类加载器的代码。有些东西必须加载你的类加载器。。。。这就是系统类加载器(它神奇地位于JVM中),您是如何实现类加载器的?你可能会委托给家长吗?好的,你不是从头开始写的,但它仍然是你的类。您必须首先反驳这个假设:您的类加载器正在被调用,但它委托给父类加载器。您是否可以提供一个最小的工作示例?请发布您的类加载器的代码