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类加载框架图:
3、源码解读:
未完,待补充