我有一个名为“MyClassLoader”的URLClassLoader,它设置了一些jar。 如果我尝试在运行时加载.jars:我的加载程序工作,但使用setContextClassLoader不?
MyClassLoader.loadClass("MyClass");
它的工作原理。
如果我尝试
Thread.currentThread().setContextClassLoader(MyClassLoader);
Thread.currentThread().getContextClassLoader().loadClass("MyClass");
它也适用。
但如果我尝试
Thread.currentThread().setContextClassLoader(MyClassLoader);
Class.forName("MyClass");
它抛出一个ClassNotFoundException
。
当然,Class.forName
这里只是一个例子;试图使用MyClass
也会抛出异常。
所有这可能意味着我不明白setContextClassLoader
如何工作。任何人都可以向我澄清这一点,并帮助我理解它 - 我该怎么做才能让我的代码工作?谢谢。
是的,是的Class.forName中的安全编码指南部6列为出现异常行为依赖于呼叫者的类加载器的那些方法之一。不是那些依赖线程上下文类加载器的方法更好。聪明的事情是明确使用类加载器。 – 2009-07-03 10:57:18