Tomcat作为一个Web容器,它的类加载机制与JVM的类加载机制有所不同。在JVM中,类加载器采用双亲委派机制,即当一个类需要被加载时,首先会委托父类加载器去加载,如果父类加载器找不到该类,再由子类加载器尝试加载。而Tomcat为了实现Web应用的隔离性,打破了双亲委派机制,采用了自定义的类加载器WebAppClassLoader。
WebAppClassLoader是Tomcat中用于加载Web应用的类加载器,它继承自URLClassLoader,并重写了findClass和loadClass方法来实现自己的加载逻辑。
findClass方法:WebAppClassLoader首先会在Web应用的本地目录下查找要加载的类,如果找不到,则会委托给父类加载器去查找。如果父类加载器也找不到该类,则会抛出ClassNotFoundException异常。
loadClass方法:loadClass方法是WebAppClassLoader重写的ClassLoader类的方法。在loadClass方法中,WebAppClassLoader会先尝试使用自己的findClass方法加载类,如果找不到,则会调用父类加载器的loadClass方法。这样就实现了优先加载Web应用自定义的类。
通过打破双亲委派机制,Tomcat能够实现Web应用的隔离性,每个Web应用都有自己独立的类加载器,避免了不同Web应用之间的类冲突问题。
Learn more:
本文作者:yowayimono
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!