首页 > 其他分享 >为什么要设计双亲委派机制

为什么要设计双亲委派机制

时间:2023-02-22 11:46:39浏览次数:41  
标签:委派 fis String classPath name 双亲 new 机制 加载

为什么要设计双亲委派机制?

  • 沙箱安全机制:自己写的java.lang.String.class类不会被加载,这样便可以防止核心API库被随意篡改
  • 避免类的重复加载:当父亲已经加载了该类时,就没有必要子ClassLoader再加载一次,保证被加载类的唯一性

 

全盘负责委托机制 “全盘负责”是指当一个ClassLoder装载一个类时,除非显示的使用另外一个ClassLoder,该类所依赖及引用的类也由这个ClassLoder载入。 自定义类加载器示例: 自定义类加载器只需要继承 java.lang.ClassLoader 类,该类有两个核心方法,一个是loadClass(String, boolean),实现了双亲委派机制,还有一个方法是findClass,默认实现是空方法,所以我们自定义类加载器主要是重写findClass方法。
public class MyClassload extends ClassLoader {


private String classPath;

public MyClassload(String classPath) {
this.classPath = classPath;
}

@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
return super.loadClass(name);
}

@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
String pacakge = name.replaceAll("\\.", "/");
FileInputStream fis = null;
byte[] data = null;
try {
fis = new FileInputStream(classPath + "/" + pacakge
+ ".class");
int len = fis.available();
data = new byte[len];
fis.read(data);
fis.close();
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
//defineClass将一个字节数组转为Class对象,这个字节数组是class文件读取后最终的字节数组。
return defineClass(name, data, 0, data.length);
}

public static void main(String[] args) throws Exception {
MyClassload myClassload = new MyClassload("C:/test");
Class<?> aClass = myClassload.loadClass("com.example.jvm.User");
Object user = aClass.newInstance();
Method sout = aClass.getDeclaredMethod("sout", null);
sout.invoke(user, null);
System.out.println(aClass.getClassLoader().getClass().getName());
}
}

运行结果

=============加载User.class===============
=======自己的加载器加载类调用方法=======
com.example.jvm.MyClassload

 

 

 

标签:委派,fis,String,classPath,name,双亲,new,机制,加载
From: https://www.cnblogs.com/avalanche/p/17143818.html

相关文章

  • C++反射机制实现
    直接上代码#include<iostream>#include<map>classBase{public:virtualvoidhello()const=0;};classA:publicBase{public:A(){......
  • 【操作系统】操作系统的运行机制和体系结构
    1.运行机制(1)指令指令就是处理器(CPU)能识别、执行的最基本命令,比如:加法指令就是让CPU进行加法运算。(2)两种指令CPU如何判断当前是否可以执行特权指令?(3)两种处理器状态......
  • 二十一、Flink容错机制之状态一致性
    状态一致性  之前说到检查点又叫作“一致性检查点”,是Flink容错机制的核心。接下来就对状态一致性的概念进行说明,结合理论和实际应用场景,讨论Flink流式处理架构中的应对......
  • Jvm类加载机制
         其中loadClass的类加载过程有如下几步:加载>>验证>>准备>>解析>>初始化>>使用>>卸载加载:在硬盘上查找并通过IO读入字节码文件,使用到类时......
  • ES自定义评分机制:function_score查询
    转:https://blog.csdn.net/w1014074794/article/details/1205235501function_score介绍1.1简介主要用于让用户自定义查询相关性得分,实现精细化控制评分的目的。......
  • 关于Java锁机制的理解
    首先Java中为什么会使用锁:是为了解决Java共享内存模型带来的线程安全问题。思考:两个线程都有初始值为0的静态变量做自增,一个做自减,各做5000次,counter的值会为0嘛?public......
  • Java异常机制
    异常机制代码实际编写后并不一定是完美的,可能会有我们没有考虑到的情况异常类型之前其实已经接触过一些异常了,比如数组越界异常,空指针异常等,这些错误都是异常类型,每一......
  • Fatfs写入刷新机制
    fatfs写入:f_write,单次写入长度不限,但是并非每次写入都直接将数据写入到flash中,而是在写入长度大于一个sector之后,才会调用底层写入接口。f_sync和f_close都会将数据立即......
  • 集群机制:注册表同步以及高可用源码剖析
    1在完成服务注册之后,会将注册信息同步给群里中的其他节点,以实现高可用,续约,服务更新,下线都是一样的操作2拿到集群中其他节点的url信息,同步数据3执行批处理任务,ba......
  • 易基因项目文章 | 组蛋白ChIP-seq揭示烟粉虱含菌细胞共生菌调控宿主生殖的新机制
    喜报:易基因组蛋白ChIP-seq研究成果见刊《CellReports》2023年02月10日,沈阳农业大学植物保护学院博士研究生姚亚林为第一作者、栾军波教授为论文通讯作者在《CellRep......