tomcat的类加载机制是违反了双亲委托原则的,对于一些未加载的非基础类(Object,String等),各个web应用自己的类加载器(WebAppClassLoader)会优先加载,加载不到时再交给commonClassLoader走双亲委托。
对于JVM来说:
因此,按照这个过程可以想到,如果同样在CLASSPATH指定的目录中和自己工作目录中存放相同的class,会优先加载CLASSPATH目录中的文件。
1. 不打破双亲委派一样可以保证不同web应用加载不同位置的内容,这是通过每个web应用使用不同的WebAppClassLoader实例作为类加载器实现的,打破双亲委派压根就不是为了实现jar包隔离
2. 打破双亲委派的真正目的是,当classpath、catalina.properties中common.loader对应的路径、web应用/WEB-INF,下有同样的jar包时,优先使用/WEB-INF下的jar包