转自javaeye,作者bruce,原文链接http://forum.javaeye.com/viewtopic.php?t=11
Class Loader的作用范围:
BootStrap Class Loader:
load JRE/lib/rt.jar, sunrsasign.jar, charsets.jar, jce.jar, jsse.jar, plugin.jar
Ext Class Loader:
load JRE/lib/ext目录下的库文件, load JRE/classes目录下的类
App Class Loader:
load CLASSPATH变量指定路径下的类
以上的load路径都是写死在JVM的C++源代码里面的,不能改变,详细请见王森的《Java深度历险》
EJB Class Loader:
继 承自App Class Loader,继承层次根据App Server有所不同,一个EJB Class Loader它的load Class的范围仅限于JAR或者EAR范围之内。App Server会针对每一个EJB包文件创建一个EJB Class Loader的实例.
Web App Class Loader:
继承自App Class Loader,继承层次根据App Server有所不同,一个Web App Class Loader:它的load Class的范围在 WEB-INF/lib下的库文件和WEB-INF/classes目录下的class文件。
Class Loader加载类的顺序:
The ClassLoader class uses a delegation model to search for classes and resources. Each instance of ClassLoader has an associated parent class loader. When requested to find a class or resource, a ClassLoader instance will delegate the search for the class or resource to its parent class loader before attempting to find the class or resource itself. The virtual machine's built-in class loader, called the "bootstrap class loader", does not itself have a parent but may serve as the parent of a ClassLoader instance.
ClassLoader类使用了委托模型来查找类和资源。如果ClassLoader实例有一个与其相关联的父类加载器。在查找其自己的类和资源前会先查找其父类的类和资源。虚拟机内建的类加载器叫:“bootstrap class loader”,它没有父类加载器但是serve可能作为类加载器实例的父加载器。
一个例外:按照Servlet 规范, Web App Classloader的行为和普通的ClassLoader不同,它要先去load所需的Class,不成功在交给Parent来装入(除了jdk本身的类)。
Class Loader的顺序:BootStrap Class Loader,Ext Class Loader,App Class Loader