簡體   English   中英

如何在Java中編寫URLClassLoader,以便它可以在加載某些類之前執行一段代碼?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM