常见的Tomcat类加载方式有以下几种:
- 共享类加载器(Common类加载器): 在Tomcat的公共类库目录(common目录)下放置的类,可以被所有Web应用程序共享使用。这些类会被Common类加载器加载并放置在JVM的Common类加载器对应的类加载器空间中。
- Web应用程序类加载器(Web应用类加载器): 每个Web应用程序在启动时都会创建一个Web应用程序类加载器,负责加载该Web应用程序的类。该类加载器在Web应用程序的WEB-INF/classes目录和WEB-INF/lib目录下查找类。
- 系统类加载器(System类加载器): 在Tomcat的全局公共类库目录(lib目录)下放置的类,可以被整个Tomcat容器共享使用。这些类会被System类加载器加载并放置在JVM的System类加载器对应的类加载器空间中。
Tomcat的类加载架构设计如下:
- Tomcat的类加载架构采用了两级类加载器的设计。
- 第一级是Catalina类加载器,它继承自JVM的Common类加载器(也可以配置为继承自JVM的System类加载器),负责加载Tomcat自身的类以及Web应用程序的共享类。
- 第二级是Web应用程序类加载器,每个Web应用程序在启动时都会创建一个Web应用程序类加载器,负责加载该Web应用程序的类。它的父加载器是Catalina类加载器。
- 这种两级类加载器的设计可以实现类加载的隔离性,不同Web应用程序之间的类互不干扰。同时也能够提高类加载的效率,避免了反复加载相同的类。