双亲委派模型

从JAVA虚拟机的角度来讲,只有两种类型的类加载器:启动类加载器,由C++实现,是虚拟机自身的一部分;所有其他的类加载器,由java语言实现,独立于虚拟机外部,并且全部继承自java.lang.ClassLoader。

从java开发人员的角度来看,一般是由三种类加载器

BootStrap ClassLoader

Exetension ClassLoader

Application ClassLoader

这里列加载器之间的父子关系一般不是继承关系,而是以组合关系来复用父加载器的代码。

破坏双亲委派模型

第一次被破坏发生在双亲委派模型出现之前,对已经存在的用户自定义类加载器的实现代码,java设计者引入双亲委派时不得不做出一些妥协。在java.lang.ClassLoader添加了一个新的protected findClass()方法,去重写loadClass()方法。

第二次是由自身的缺陷所导致的,双亲委派很好地解决了各个类加载器的基础类的同一问题,但是如果出现基础类又要调用回用户的代码时就要破坏该模型。引入了线程上下文类加载器。

第三次是由于用户对程序动态性的追求而导致的。

扫描二维码关注公众号,回复: 114892 查看本文章

猜你喜欢

转载自my.oschina.net/u/2402401/blog/1630352