Tomcat的类加载机制基于jvm的类加载机制做些一些改变,Tomcat8.5默认改变了双亲委派机制 注: 不明白双亲委派的可以先去了解下
举例:
在一个tomcat中部署了两个服务
均引用了 abc.jar 中的 com.ziye.Def 这个类
不同的是
application1 服务引用的版本是abc-1.0.jar
application2 服务引用的版本是abc-2.0.jar , 而且两个jar中的 Def 类的代码方法有所不同
此时由jvm的双亲委派机制来加载的话(SystemClassLoader/AppClassLoader)就会扫描到abc.jar,但是 application2 所使用的jar版本其实是 abc-1.0.jar 此时使用jvm的双亲委派机制加载就会出现问题
接下来回归正题,看一下Tomcat类加载机制
Tomcat首先会从 Bootstrap ClassLoader 加载指定的类
未加载到, 从 /WEB-INF/classes 加载
未加载到, 从 /WEB-INF/lib/*.jar 加载
未加载到, 则一次从 System、Common、Shared 加载 (该步骤使用双亲委派)
其他章节 -> 跳转
end...