简述Tomcat 中类加载的顺序 ?
参考答案:
Tomcat中的类加载顺序是一个相对复杂但有序的过程。Tomcat使用了多种类加载器,每个加载器都有其特定的职责和加载范围。以下是Tomcat中类加载的简要顺序:
- Bootstrap引导类加载器:这是最顶层的类加载器,由C++编写,是JVM的一部分。它负责加载Java的核心类库,如rt.jar、resources.jar等。
- System系统类加载器:这个加载器负责加载环境变量CLASSPATH或系统属性java.class.path指定的类库。它加载的是系统级的类,对所有的Web应用都是可见的。
- 应用类加载器(Webapp ClassLoader):这个加载器主要用于加载当前Web应用下的类。它会首先检查
WEB-INF/classes
目录和WEB-INF/lib
目录下的类和jar文件。 - Common类加载器:当应用类加载器找不到指定的类时,会委托给Common类加载器。Common类加载器主要负责加载Tomcat服务器自身的类库,通常位于
$CATALINA_HOME/lib
目录下。
Tomcat的类加载机制采用了双亲委派模型,即当一个类加载器收到类加载的请求时,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成。每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中。只有当父类加载器无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去加载。
这种双亲委派模型有助于保证Java核心库的类型安全,防止类库之间的冲突。同时,它也使得各个Web应用之间能够相互隔离,避免了类库版本冲突等问题。
需要注意的是,具体的加载顺序可能会因为Tomcat的版本和配置有所不同,但总体上的加载逻辑和原则是一致的。