public class MyClassLoader extends URLClassLoader {
public MyClassLoader() throws Exception{
super(new URL[]{new URL("file:///home/ubuntu/java/hello.jar")});
}
@Override
public Class loadClass(String name) throws ClassNotFoundException {
if (name.equals("hello.example.org.Foo") || name.equals("hello.example.org.Bar"))
{
System.out.println("Foo or Bar is loaded");
}
return super.loadClass(name);
}
}
我只想在加载某些类之前执行一个代码块,并且上述代码不太可行,我不确定错误在哪里?
一旦我将所有课程都在JAR文件中
java -Djava.system.class.loader=MyClassLoader -jar hello.jar
如果通过-Djava.system.class.loader=MyClassLoader
设置系统类加载程序,则需要为constructor提供classloader参数:
public MyClassLoader(ClassLoader parent) throws Exception{
super(new URL[]{new URL("file:///home/ubuntu/java/hello.jar")}, parent);
}
如果没有这样的构造函数,则应该看到java.lang.NoSuchMethodException
。
您应该覆盖findClass(String)
而不是LoadClass。