我们来看看这三个类加载器的主要功能
1、commonClassLoader:tomcat 最基本的类加载器,加载路径中的 class 可以被 tomcat 容器本身和各个 webapp 访问;
2、catalinaClassLoader:tomcat 容器中私有的类加載器,加载路径中的class 对于 webapp 不可见
3、sharedClassLoader:各个 webapps 共享的类加载器,加载路径中的 class对于所有的 webapp 都可见,但是对于 tomcat 容器不可见
这一部分类加载器,依然采用的是双亲委派机制,原因是,他只有一份,如果有重复,那么也是以这一份为准。
tomcat 第二部分自定义类加载器(绿色部分)
绿色部分是 java 项目在打 war 包的时候,tomcat 自动生成的类加载器,也就是说,每一个项目打成一个war 包,tomcat 都会自动生成一个类加载器,专门用来加载这个 war 包。而这个类加载器打破了双亲委派机制。我们可以想象一下,加入这个 webapp 类加载器没有打破双亲委派机制会怎么样?
如果没有打破,他就会委托父类加载器去加载,一旦加载到了,子类加载器就没有机会再加载了。所以,这一部分他打破了双亲委派机制是通过重写 ClassLoader.loadClass() 和 ClassLoader.findClass() 实现的
Was this helpful?
0 / 0