Java如何自定义类加载器 缺乏、安全感 2021-09-22 01:16 270阅读 0赞 # Java如何自定义类加载器 # 本文是基于CentOS 7.3系统环境和JDK 1.8,打破双亲委派机制,是在自定义类加载器: * **CentOS 7.3** -------------------- ## 1. 自定义类 ## * **User.class** package com.chaoyue.jvm.pojo; public class User { private Integer id; private String name; static { System.out.println("**********************Load User**********************"); } public User() { } public User(Integer id, String name) { super(); this.id = id; this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void sout() { System.out.println("***********自己的类加载器调用sout方法***********"); } } ## 2. 将class文件放入到新的加载路径 ## 将User.class字节码文件放入到新的加载路径D:\\test\\com\\chaoyue\\jvm ## 3. 自定义类加载器 ## * **MyClassLoader.class** 自定义类加载器继承于ClassLoader package com.chaoyue.jvm; import java.io.FileInputStream; public class MyClassLoader extends ClassLoader { private String classPath; public MyClassLoader(String classPath) { this.classPath = classPath; } private byte[] loadByte(String name) throws Exception { name = name.replaceAll("\\.", "/"); FileInputStream fis = new FileInputStream(this.classPath + "/" + name + ".class"); int len = fis.available(); byte[] data = new byte[len]; fis.read(data); fis.close(); return data; } @Override public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { synchronized (getClassLoadingLock(name)) { // First, check if the class has already been loaded Class<?> c = findLoadedClass(name); if (c == null) { long t0 = System.nanoTime(); if (c == null) { // If still not found, then invoke findClass in order // to find the class. long t1 = System.nanoTime(); if (name.startsWith("com.chaoyue.jvm")) { c = findClass(name); } else { c = this.getParent().loadClass(name); } // this is the defining class loader; record the stats sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0); sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1); sun.misc.PerfCounter.getFindClasses().increment(); } } if (resolve) { resolveClass(c); } return c; } } @Override protected Class<?> findClass(String name) throws ClassNotFoundException { try { byte[] data = loadByte(name); return defineClass(name, data, 0, data.length); } catch (Exception e) { e.printStackTrace(); throw new ClassNotFoundException(); } } } ## 4. 自定义main函数,使用自定义类加载器 ## * **MyClassLoaderTest.class** package com.chaoyue.jvm; import java.lang.reflect.Method; public class MyClassLoaderTest { public static void main(String args[]) throws Exception{ MyClassLoader classLoader = new MyClassLoader("D:/test"); Class clazz = classLoader.loadClass("com.chaoyue.jvm.pojo.User"); Object obj = clazz.newInstance(); Method method = clazz.getDeclaredMethod("sout", null); method.invoke(obj,null); System.out.println(clazz.getClassLoader().getClass().getName()); } } --------------------
相关 Java类加载器理解:如何加载并使用自定义类 在Java编程中,类加载器是确保程序正确执行的关键工具。以下是关于Java类加载器的详细理解和操作过程: 1. **系统类加载器(Bootstrap Class Loader 向右看齐/ 2024年09月11日 05:42/ 0 赞/ 17 阅读
相关 自定义类加载器(自定义类加载器的作用) java自定义classloader在加载jar包和classes的时候,classloader不能找到classpath下的配置文件 设我们有一个hello.jar文件 ╰+攻爆jí腚メ/ 2023年09月23日 18:51/ 0 赞/ 142 阅读
相关 Java自定义类加载器 一、类加载流程 类加载指的是一个.class文件的加载,在Java中.class文件可能是一个类,也可能是一个接口。此处都叫做类加载。整个类加载的过程即:加载→验证→准备 分手后的思念是犯贱/ 2022年10月22日 13:51/ 0 赞/ 137 阅读
相关 Java自定义类加载器 如何自定义类加载器,加载自定义路径的`.class`文件,然后执行定义的方法? 源码 package com.hua.jvm.classloader; 野性酷女/ 2022年09月12日 01:59/ 0 赞/ 205 阅读
相关 自定义类加载器 1. 双亲委派模型 1.1 什么是双亲委派模型? 首先,先要知道什么是类加载器。简单说,类加载器就是根据指定全限定名称将class文件加载到JVM内存,转为Clas 迈不过友情╰/ 2022年05月18日 04:15/ 0 赞/ 263 阅读
相关 自定义类加载器 package com.jerry.demo.core; import com.jerry.demo.model.User; imp 男娘i/ 2022年02月19日 23:13/ 0 赞/ 309 阅读
相关 Java如何自定义类加载器 Java如何自定义类加载器 本文是基于CentOS 7.3系统环境和JDK 1.8,打破双亲委派机制,是在自定义类加载器: CentOS 7.3 ------- 缺乏、安全感/ 2021年09月22日 01:16/ 0 赞/ 271 阅读
相关 自定义类加载器 loadClass方法实现了双亲委派模型。 1. 首先,检查一下指定名称的类是否已经加载过,如果加载过了,就不需要再加载,直接返回。 2. 如果此类没有加载过,那么,再判 落日映苍穹つ/ 2021年09月15日 06:40/ 0 赞/ 426 阅读
相关 自定义类加载器 一 点睛 1 继承 ClassLoader 2 重写模板方法 findClass 调用defineClass 3 可以自定义类加载器加载自加密的 class 可以 朴灿烈づ我的快乐病毒、/ 2021年07月24日 12:00/ 0 赞/ 437 阅读
还没有评论,来说两句吧...