Tomcat在打破双亲委派机制方面采用了一个比较特殊的类加载器结构。这种结构允许每个Web应用程序(每个Context)都有自己的类加载器,并在这些类加载器之间创建一种层次关系,以便实现一定程度的隔离。

具体来说,Tomcat使用的类加载器结构包括以下几个关键组件:

  1. Bootstrap Class Loader(启动类加载器): 由JVM提供,用于加载Java核心类库,如java.lang包下的类。
  2. Common Class Loader(公共类加载器): 由Tomcat提供,负责加载Tomcat本身所需的类,例如Servlet API。它位于$CATALINA_HOME/lib目录下。
  3. Catalina Class Loader(Catalina类加载器): 也由Tomcat提供,是每个Context的父类加载器。它加载存放在$CATALINA_BASE/lib目录下的类。
  4. Shared Class Loader(共享类加载器): 也由Tomcat提供,用于加载所有Web应用程序都能共享的类。它加载存放在$CATALINA_BASE/lib目录下的类,但与Catalina类加载器不同,Shared类加载器是所有Context共享的。
  5. Webapp Class Loader(Web应用程序类加载器): 每个Context都有自己的Web应用程序类加载器,用于加载该Web应用程序中的类。它是Catalina类加载器的子加载器。

通过这样的类加载器层次结构,每个Web应用程序都有自己的类加载器,可以在一定程度上隔离彼此。这使得不同Web应用程序可以使用不同版本的库,而不会相互干扰。

这种结构打破了双亲委派机制的直接性,因为Web应用程序类加载器可以先尝试加载类,而不必委托给父加载器。然而,它仍然保持了一定的层次性,以确保一些基础的类库仍然由更上层的加载器加载。这样既保留了一定的隔离性,又确保了某些类的唯一性。

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.