一、ClassLoader类加载机制
在java中类加载是遵循委派双亲加载的:通过调用loadClass方法逐级往上传递委派加载请求,当找不到父ClassLoader时调用其findClass方法尝试进行查找和加载,如果当前ClassLo找不所需的Class,则由其孩子尝试进行查找和加载,如果当前ClassLoader找了所需的Class则将该Class按请求路径逐级返回孩子。其关系图如下所示:
ClassLoader.loadClass(...) 是ClassLoader的入口点。当一个类没有指明用什么加载器加载的时候,JVM默认采用AppClassLoader加载器加载没有加载过的class,调用的方法的入口就是loadClass(...)。如果一个class被自定义的ClassLoader加载,那么JVM也会调用这个自定义的ClassLoader.loadClass(...)方法来加载class内部引用的一些别的class文件。重载这个方法,能实现自定义加载class的方式,抛弃双亲委托机制如果要实现自己的类加载器,只需继承ClassLoader,重写findClass方法。