类加载器内部方法的上下文

时间:2012-04-18 13:08:24

标签: java classloader

我编写了自定义类加载器,它从文件系统加载jar文件。 customClassLoader覆盖了load和find方法及其工作方式 如何在定义类加载器之后创建所有代码,以便在方法execute的上下文中使用customClassLoader。 在方法f1()中运行此代码后,我收到此错误java.lang.NoClassDefFoundError org.xml.dd.myclass

如何在方法的上下文中定义执行我将使用customClassLoader的所有时间

Public void execute()
{

ClassLoader customClassLoader= new customClassLoader();
        try
        {
            Class.forName("org.xml.dd.myclass", true, xdmCustomClassLoader);
        }
        catch (ClassNotFoundException e2)
        {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        } 
        Thread.currentThread().setContextClassLoader(customClassLoader);
        ………………….
        F1();
        F2();       
}

1 个答案:

答案 0 :(得分:2)

必须明确使用上下文类加载器。正常的new操作等将使用拥有相关代码的类的类加载器。在下面的示例中,Executor是将要使用自定义类加载器执行的所有代码的入口点。使用类加载器加载该类并调用其方法run。您应该实现run,以便它执行需要与您的类加载器一起运行的所有代码。

public class Executor {
  public void run() {
     final MyInterface x = new MyClass();
     x.f1(); x.f2();
  }
}

public class Test {
  public static void main(char[] args) throws Exception {
    final ClassLoader customCl = new customClassLoader();
    final Executor e = 
      (Executor) Class.forName("Executor", true, customCl).newInstance();
    e.run();
  }
}