Tomcat为啥要打破JVM类加载的双亲委派机制

1、背景:

      1)当Tomcat中部署的两个WEB应用,都有相同的包路径以及类名称,但是业务实现不同。安装JVM的双亲委派机制,可能存在互相覆盖的情况;

      所以为了解决以上问题,tomcat提供WebAPP  ClassLoader :

       加载各自应用下的WEB-INF/class   WEB-INF/lib ;

     2)当Tomcat类  与WEB应用中的类有相同的包路径和类名称时,也需要隔离,单独各自加载。Tomcat 针对这些系统类提供了Catalina ClassLoader:

           加载:${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar

    3)当然Tomcat也有公共的基础类,只需要维持一份类加载,Tomcat提供了Common  ClassLoader:

           common.loader=${catalina.home}/lib,${catalina.home}/lib/*.jar,

           很明显这个类装载器搜索路径就是${catalina.home}/lib和${catalina.home}/lib/*.jar,之所以叫common class loader,是因为它加载每个应用要用到的公共jar包和class文件;
 

2、Tomcat类加载框架图:  Tomcat为啥要打破JVM类加载的双亲委派机制_第1张图片

3、源码解读:

     未完,待补充

你可能感兴趣的:(问题分析宝典)