使用Java的默认类加载程序无法加载两个相似库的不同版本。它仅关心类的完整限制类名称,并且在修改JSP文件后同时只有一个。方法区域中存在的类,因此您需要与每个JSP相对应对应一个唯一的类加载程序,以将JSP修改为JSP.T。JSP文件。
如上图所示,上面的橙色部分与原始部分相同,使用了两党分配机构,黄色部分是Tomcat第一部分的定制类加载程序。这部分主要是将课程加载到tomcat软件包中。两个父母的任命机制;绿色部分是Tomcat定制的类加载程序的第二部分。正是这一部分打破了两个父母的任命机制。
加载程序的这一部分是Tomcat在Tomcat7和之前定制的三个类加载程序,它们已加载在不同的文件中。在Tomcat8及以后之后,Tomcat合并了这三个文件夹,并将其合并为Libthe Bag,这是我们现在看到的Lib包。
当绿色是播放战争包时的Java项目时,由Tomcat生成的类加载程序会自动生成,也就是说,每个项目都是战争软件包,Tomcat将自动生成一个集体加载程序,该类负载器专门用于加载此战争软件包。班级装载机打破了两个父母的任命机制。我们可以想象加入此WebApp课程的情况而没有打破双边任命机制?如果没有破碎,它将委托父母加载程序加载。加载后,定制加载程序将被定制。没有机会加载它,然后Spring4和Spring5项目无法共存。上级可以在相应的战争中加载类文件。当然,它的项目文件仍然需要加载上级上级。
参考:Tomcat如何打破两个父母的任命机制?打破双边任命机制