如何在Java中编写URLCLASSLOADER,以便在加载某些类之前可以执行代码块

  • 本文关键字:代码 执行 Java URLCLASSLOADER 加载 java
  • 更新时间 :
  • 英文 :

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。

最新更新