从JAVA虚拟机的角度来讲,只有两种类型的类加载器:启动类加载器,由C++实现,是虚拟机自身的一部分;所有其他的类加载器,由java语言实现,独立于虚拟机外部,并且全部继承自java.lang.ClassLoader。
从java开发人员的角度来看,一般是由三种类加载器
BootStrap ClassLoader
Exetension ClassLoader
Application ClassLoader
这里列加载器之间的父子关系一般不是继承关系,而是以组合关系来复用父加载器的代码。
破坏双亲委派模型
第一次被破坏发生在双亲委派模型出现之前,对已经存在的用户自定义类加载器的实现代码,java设计者引入双亲委派时不得不做出一些妥协。在java.lang.ClassLoader添加了一个新的protected findClass()方法,去重写loadClass()方法。
第二次是由自身的缺陷所导致的,双亲委派很好地解决了各个类加载器的基础类的同一问题,但是如果出现基础类又要调用回用户的代码时就要破坏该模型。引入了线程上下文类加载器。
第三次是由于用户对程序动态性的追求而导致的。
扫描二维码关注公众号,回复:
114892 查看本文章