双亲委派机制 +全盘委托机制+自定义类加载器+打破双亲

launcher 单例创建

launcher 创建了URlClassloader 通过路径去实现类的加载

launcher 创建了extClassloader他的parent是null,这里是C++创建的引导类加载器

,这个类继承的是 URlClassloader,是扩展类加载器

launcher 创建了AppClassloader 他的parent是Exlclassloader,是应用程序加载器

自定义类加载器

先从应用程序加载器中查找是否有加载到,没有就从父类extclassloader类扩展器查找,没有就再向上查找,这里也没有就会向下查找有就加载,没有就接着向下查找

第一次加载是从子类向上查询,到顶级父类没有,

第二次就从顶级父类向下委托加载,直到应用程序类加载器,

先从下到上查找,再从上向下委托加载

第一次加载是两次查找,但是后续使用的时候是直接从应用程序类加载器使用

所有的类加载器就是在根类classLoader这里,这里classLoaser.classLoader 这里实现了双亲委派机制,findloaderClass,查找到直接返回类,没有就parent的加载器findloaserClass,连引导类bootstrapClass没有,就extclassLoader.UrlclassLoader.findclass 查找类路径,没有找到就向下接着找,找到类路径加进行类的加载

这样设计的目的是
沙箱安全机制:防止核心Api库被篡改

避免类的重复加载,当父亲已经加载了该类,不会让子类再加载一次,保证被加载类的唯一性

全盘负责委托机制

就是在加载一个类时,类里包含别的类的,这里都是同一个classloader装载这个类,除非显示的使用另外一个classloader

自定义类加载器

只需要继承java.lang.classLoader,重写findclass方法,查找类路径并装载该类

loadClass实现了双亲委派机制,findClass是空方法

如果指定路径和应用程序下都有一个就会先加载app下面的,先找父类的

打破双亲

重写loadclass,对双亲委托代码进行ifelse就OK了

可以实现不同版本的共存与隔离

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值