Tomcat的类加载机制是违反了双亲委托原则的,对于一些未加载的非基础类(Object,String等),各个web应用自己的类加载器(WebAppClassLoader)会优先加载,加载不到时再交给commonClassLoader走双亲委托。
* tomcat自定义的类加载器的WebAppClassLoader重写了loadClass()方法
* 对于一些未加载的非基础类(Object,String等),各个web应用自己的类加载器(WebAppClassLoader)会优先加载,
* 加载不到时再交给commonClassLoader走双亲委托。
* 具体的加载逻辑位于WebAppClassLoaderBase.loadClass()方法中
* Common、Catalina、Shared类加载器是URLClassLoader类的实例,在默认的配置中,它们其实都是同一个对象,即Common ClassLoader
* Extended Loader加载System.getProperty("java.ext.dirs")所指定的路径或jar
* AppClass Loader加载System.getProperty("java.class.path")所指定的路径或jar
加载System.getProperty("java.class.path")所指定的路径或jar
类加载关系图.png
类加载器的继承关系.png
网友评论