如上图所示,上面的橙色部分还是和原来一样,采取的双亲委派机制,黄色部分是tomcat第一部分自定义的类加载器,这部分紧张是加载tomcat包中的类,这一部分依然采取的是双亲委派机制; 而绿色部分是tomcat第二部分自定义类加载器,正是这一部分,冲破了类的双亲委派机制。
Tomcat第一部分自定义类加载器(黄色部分)这部分类加载器,在tomcat7及以前是tomcat自定义的三个类加载器,分别在不同文件加载的jar包,而到了tomcat8及往后,tomcat 将这三个文件夹合并了,合并成一个lib包,也便是我们现在看到的lib包。
Tomcat第二部分自定义类加载器(绿色部分)绿色是Java项目在打war包的时候,tomcat 自动天生的类加载器,也便是说,每一个项目打成war包,tomcat都会自动天生一个类加载器,专门用来加载这个war包,而这个类加载器冲破了双亲委派机制,我们可以想象一下,加入这个 webapp类没有冲破双亲委派机制会怎么样? 如果没有冲破,它就会委托父类加载器去加载,一 旦加载到了,自定义加载器就没有机会加载了,那么Spring4和Spring5的项目就没有可能共存了。以是,这一部分它冲破了双亲委派机制,这样一来webapp类加载器就不须要再让上级类去加载,它自己就可以加载对应的war里的class文件,当然了,它的项目文件还是要委托上级加载的。