[英]How to write a URLClassLoader in Java such that it can execute a block of code prior to loading certain classes?
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
您應該覆蓋findClass(String)
而不是loadClass 。
如果通過-Djava.system.class.loader=MyClassLoader
設置系統類加載器, -Djava.system.class.loader=MyClassLoader
需要提供帶有classloader參數的構造函數:
public MyClassLoader(ClassLoader parent) throws Exception{
super(new URL[]{new URL("file:///home/ubuntu/java/hello.jar")}, parent);
}
如果沒有這樣的構造函數,你應該看到java.lang.NoSuchMethodException
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.