- 如果已经加载,则返回该类
- 调用父级loadClass()
- 尝试自己加载类。
因此,系统类路径中定义的类应始终首先被加载。Tomcat为每个war定义了一个类加载器,其中系统类加载器为其父级,因此,如果要加载类,则会首先查找系统类路径,然后再在war文件中定义的类路径中查找。
据我所知,这是出于两个原因:
- 避免使用不同版本的类出现问题。想象一下,如果我在war文件中重新定义了java.lang.Object,那将是一场噩梦。
- 避免对子类加载器产生依赖:系统类加载器不能依赖于子类加载器:例如,重新部署war文件将变得困难。
所以,问题是:
除了上述问题之外,实施不首先进行父级搜索的类加载器是否还存在其他陷阱?