Java文档中描述了setContextClassLoader的作用,可是,实践过程中,感觉完全不是这么回事,我现在的认识就是基本没用。如果为了装载类,采用:
  URLClassLoader loader = new URLClassLoader( 
   urlArray ,  
   Thread.currentThread().getContextClassLoader() 
);
就足够了。有很多人说使用了setContextClassLoader,后面创建类,该线程回采用自定义的classLoader,其实并非如此,如果一个在自定义classLoader中才能够转载的类A,
直接调用 A ao = new A();
绝对抛出 java.lang.NoClassDefFoundError真正要实现 A ao = new A(); 可以成功,则需要从一个本身就是自定义的ClassLoader装载并实例化的类开始执行,才能成功。比如,有两个类,A , B,均只有自定义的ClassLoader才能装载的,如果类B的一个Method中包含了
A ao = new A()
则要想使其正常执行,则必须先用 这个自定义ClassLoader Load B ,这时,B才真正集成了自定义的ClassLoader。然后用newInstance的方法创建B的实例运行,A ao = new A()这句代码就通过了。看了很多人讨论setContextClassLoader,都举例Tomcat,其实Tomcat也是先将跟对象通过自定义ClassLoader装载反射创建后,才使得其子对象创建自动使用自定义ClassLoader的。这只是我现在的看法,大家多多发表意见。另外,大家写针对ClassLoader的测试代码时,不要在IDE中直接运行,建议采用java 命令行,这样才能验证出是否自定义的ClassLoader已经正常工作了。