定义自定义系统类加载器 [英] Define custom system classloader
本文介绍了定义自定义系统类加载器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图告诉JVM将自定义的ClassLoader用作默认的ClassLoader
I'm trying to tell the JVM to use my custom ClassLoader as default ClassLoader
这是我用来选择类的VM参数:
This is the VM argument i use to pick my class:
-Djava.system.class.loader=JarClassLoader
这是我得到的错误
Error occurred during initialization of VM
java.lang.Error: java.lang.NoSuchMethodException: JarClassLoader.<init>(java.lang.ClassLoader)
at java.lang.ClassLoader.initSystemClassLoader(Unknown Source)
at java.lang.ClassLoader.getSystemClassLoader(Unknown Source)
Caused by: java.lang.NoSuchMethodException: JarClassLoader.<init>(java.lang.ClassLoader)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getDeclaredConstructor(Unknown Source)
at java.lang.SystemClassLoaderAction.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.lang.ClassLoader.initSystemClassLoader(Unknown Source)
at java.lang.ClassLoader.getSystemClassLoader(Unknown Source)
我必须定义特定的方法还是使用错误的参数?
Do i have to define a specific method or am i using the wrong argument?
推荐答案
自定义ClassLoader
Custom ClassLoader
public class CustomClassLoader extends ClassLoader{
public CustomClassLoader(ClassLoader classLoader) {
super(classLoader);
}
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
System.out.println("Loading class :" + name);
return super.loadClass(name);
}
}
主班
public class Main {
public static void main(String[] args) {
System.out.println("Starting main");
}
}
VM参数: -Djava .system.class.loader = CustomClassLoader
所有类都在默认包中,并且可以成功执行。
All classes are in default package and it executes successfully.
输出:
加载类:Main
启动main
这篇关于定义自定义系统类加载器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文