当前位置: 首页 > news >正文

双亲委派模型的破坏

双亲委派模型的第一次“被破坏”其实发生在双亲委派模型出现之前--即JDK1.2发布之前。由于双亲委派模型是在JDK1.2之后才被引入的,而类加载器和抽象类java.lang.ClassLoader则是JDK1.0时候就已经存在,面对已经存在 的用户自定义类加载器的实现代码,Java设计者引入双亲委派模型时不得不做出一些妥协。为了向前兼容,JDK1.2之后的java.lang.ClassLoader添加了一个新的proceted方法findClass(),在此之前,用户去继承java.lang.ClassLoader的唯一目的就是重写loadClass()方法,因为虚拟在进行类加载的时候会调用加载器的私有方法loadClassInternal(),而这个方法的唯一逻辑就是去调用自己的loadClass()。JDK1.2之后已不再提倡用户再去覆盖loadClass()方法,应当把自己的类加载逻辑写到findClass()方法中,在loadClass()方法的逻辑里,如果父类加载器加载失败,则会调用自己的findClass()方法来完成加载,这样就可以保证新写出来的类加载器是符合双亲委派模型的。

双亲委派模型的第二次“被破坏”是这个模型自身的缺陷所导致的,双亲委派模型很好地解决了各个类加载器的基础类统一问题(越基础的类由越上层的加载器进行加载),基础类之所以被称为“基础”,是因为它们总是作为被调用代码调用的API。但是,如果基础类又要调用用户的代码,那该怎么办呢。

这并非是不可能的事情,一个典型的例子便是JNDI服务,它的代码由启动类加载器去加载(在JDK1.3时放进rt.jar),但JNDI的目的就是对资源进行集中管理和查找,它需要调用独立厂商实现部部署在应用程序的classpath下的JNDI接口提供者(SPI, Service Provider Interface)的代码,但启动类加载器不可能“认识”之些代码&#

http://www.lryc.cn/news/479818.html

相关文章:

  • Android关机流程知多少?
  • 深入理解指针end(总结篇)
  • C# 程序暂停的两种方式
  • 【LeetCode】【算法】160.相交链表
  • 光伏破局 引领能源革命
  • Jenkins声明式Pipeline流水线语法示例
  • 互联网技术净土?原生鸿蒙开启全新技术征程
  • 关于Django 模型字段 `choices`自定义数据类型的枚举——补充
  • CAP理论的延申--BASE理论
  • 【傻呱呱】phpMyAdmin怎样给特定用户授权特定数据库权限?
  • 『VUE』21. 组件注册(详细图文注释)
  • 如何产看SQL 查询的执行时间
  • 计算机网络——路由器构成
  • 架构师之路-学渣到学霸历程-48
  • HappyChart——一款简单好用的专业绘图软件
  • 【Linux】进程信号全攻略(二)
  • redis用法(二)
  • Python-利用os,tkinter库编写一个伪恶意程序文件(Pro版)
  • Oracle视频基础1.4.4练习
  • GOF的C++软件设计模式的分类和模式名称
  • 有向图的完全可达性(有向图搜索全路径的问题) C#DFs
  • 前端开发实现自定义勾选/自定义样式,可复选,可取消勾选
  • 鸿蒙-promptAction.showToast基于PC屏幕底部提示
  • Vert.x,应用监控 - 全链路跟踪,基于Zipkin
  • Rust常用数据结构教程 序列
  • 智慧城市路面垃圾识别系统产品介绍方案
  • 网络安全:构建坚固的数字堡垒
  • LeetCode题练习与总结:打乱数组--384
  • 科技改变生活:最新智能开关、调光器及插座产品亮相
  • 传统RAG流程;密集检索器,稀疏检索器:中文的M3E