美文网首页java
java双亲委派模型

java双亲委派模型

作者: 凯玲之恋 | 来源:发表于2019-01-16 19:14 被阅读26次

Java类加载器(ClassLoader)
双亲委派模式要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器,请注意双亲委派模式中的父子关系并非通常所说的类继承关系,而是采用组合关系来复用父类加载器的相关代码,类加载器间的关系如下:

TIM截图20190116163949.png
双亲委派模式是在Java 1.2后引入的,其工作原理的是,如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式

3 双亲委派模式优势

  • 采用双亲委派模式的是好处是Java类随着它的类加载器一起具备了一种带有优先级的层次关系,通过这种层级关可以避免类的重复加载,当父亲已经加载了该类时,就没有必要子ClassLoader再加载一次。
  • 其次是考虑到安全因素,java核心api中定义类型不会被随意替换,假设通过网络传递一个名为java.lang.Integer的类,通过双亲委托模式传递到启动类加载器,而启动类加载器在核心Java API发现这个名字的类,发现该类已被加载,并不会重新加载网络传递的过来的java.lang.Integer,而直接返回已加载过的Integer.class,这样便可以防止核心API库被随意篡改
  • 可能你会想,如果我们在classpath路径下自定义一个名为java.lang.SingleInterge类(该类是胡编的)呢?该类并不存在java.lang中,经过双亲委托模式,传递到启动类加载器中,由于父类加载器路径下并没有该类,所以不会加载,将反向委托给子类加载器加载,最终会通过系统类加载器加载该类。但是这样做是不允许,因为java.lang是核心API包,需要访问权限,强制加载将会报出如下异常
java.lang.SecurityException: Prohibited package name: java.lang

相关文章

  • Tomcat类载入器

    大家都知道,Java的类加载机制是双亲委派模型,那么什么是双亲委派模型呢?我们这里简要的说一下,双亲委派模型...

  • java类加载破坏双亲委派模型

    前面java类加载器与双亲委派模型中提到Java采用个双亲委派的方式来完成类加载,但是双亲委派模型并不是一个强制的...

  • sandBox源码分析之ClassLoader

    提起classLoader,就不由自主想起了java classLoader的双亲委派模型,那么到底什么是双亲委派...

  • 深入理解Tomcat(五)类加载机制

    前言 我们知道,Java默认的类加载机制是通过双亲委派模型来实现的。而Tomcat实现的方式又和双亲委派模型有所区...

  • JVM系列(九):Java类加载机制之双亲委派模型

    前言 双亲委派模型是Java加载类的机制.采用双亲委派模型的好处是Java类随着它的类加载器一起具备了一种带有优先...

  • java双亲委派模型

    Java类加载器(ClassLoader)双亲委派模式要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父...

  • 聊聊JDBC是如何破坏双亲委派模型的

    资源来源《深入理解Java虚拟机》 双亲委派模型的第一次“被破坏”其实发生在双亲委派模型出现之前--即JDK1.2...

  • Java 基础 - 双亲委派模型

    学习完整课程请移步 互联网 Java 全栈工程师 类加载器 加载类的开放性 类加载器(ClassLoader)是 ...

  • 类加载器

    源码附送 java类加载为什么需要双亲委派模型这样的往返模式? 委派模型对于安全性是非常重要的 恶意的意图有人能写...

  • 双亲委派模型

    双亲委派模型图 双亲委派的优点: 主要是为了安全性,避免用户自己编写的类动态替换Java的一些核心类,比如Stri...

网友评论

    本文标题:java双亲委派模型

    本文链接:https://www.haomeiwen.com/subject/bncvdqtx.html