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

自定义classloader

1.概述

classloader 的作用是加载字节码到jvm,有些情况下,我们比如使用插件模式,可能需要自定义从外部加载插件到jvm。

2.实现过程

2.1.定义自定义classloader

package com.example.demo.loader;import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;public class MyClassLoader extends ClassLoader {private String classPath;public MyClassLoader(String classPath) {this.classPath = classPath;}@Overrideprotected Class<?> findClass(String name) throws ClassNotFoundException {byte[] classData = loadClassData(name);if (classData == null) {throw new ClassNotFoundException();} else {return defineClass(name, classData, 0, classData.length);}}private byte[] loadClassData(String className) {// 将包名转换为路径String fileName = classPath + File.separator +className.replace('.', File.separatorChar) + ".class";try (InputStream is = new FileInputStream(fileName);ByteArrayOutputStream baos = new ByteArrayOutputStream()) {int ch;while ((ch = is.read()) != -1) {baos.write(ch);}return baos.toByteArray();} catch (IOException e) {e.printStackTrace();return null;}}
}

这个代码继承 classloader,并重写了findClass.

2.2.定义外部类

package com.example.demo.loader;public class MyDynamicClass {public void sayHello() {System.out.println("Hello from dynamically loaded class!");}
}

2.3. 使用自定义classloader

package com.example.demo.loader;public class ClassLoaderDemo {public static void main(String[] args) {try {// 指向 .class 文件的根目录MyClassLoader loader = new MyClassLoader("D:\\work\\research\\demo\\target\\classes");// 加载类(注意使用全限定名)Class<?> clazz = loader.loadClass("com.example.demo.loader.MyDynamicClass");// 创建实例Object instance = clazz.getDeclaredConstructor().newInstance();// 调用方法clazz.getMethod("sayHello").invoke(instance);} catch (Exception e) {e.printStackTrace();}}
}
http://www.rkmt.cn/news/51701.html

相关文章:

  • Floyd判圈和Brent判圈
  • 2025年石棉橡胶板厂家联系方式汇总:专业服务与产品解析
  • 智表ZCELL产品V3.4 版发布,新增区域筛选、字母列参等功能。
  • 元推理品析:自指有机,自洽有缘
  • qqw
  • 详细介绍:Vue3 表单输入绑定
  • Splunk Enterprise 10.0.2 发布 - 搜索、分析和可视化,数据全面洞察平台
  • C# 常用控件(学习笔记6)
  • Ai元人文:“退一万步”的设想
  • TikTok(抖音)国际现代风水指南1什么是风水?
  • Windows-icacls
  • 安卓助手
  • 【Linux】curl基础语法与常用参数详解
  • 20232414 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 力扣 第 476 场周赛(A~D)
  • 2025 年 11 月冷却塔厂家推荐排行榜,闭式冷却塔,方形冷却塔,工业冷却塔,全钢冷却塔,凉水塔,圆形冷却塔,玻璃钢冷却塔,防腐冷却塔,冷却水塔公司推荐
  • 3.分治算法的设计思想与分析方法
  • 2025 年 11 月螺杆泵厂家推荐排行榜,单干污泥料斗,浆料进料喂料,高压耐磨石油工业,化工环保食品级,船舶造纸加药计量,耐腐蚀高粘度污水污泥,不锈钢铸铁304316螺杆泵公司推荐
  • 2025 年 11 月冷拉/冷拔方钢厂家推荐排行榜,冷拉方钢,冷拔方钢,精密冷拉方钢,高强度冷拔方钢公司推荐
  • 每日一导5
  • 2025 年 11 月冷拉/冷拔异型钢厂家推荐排行榜,精密冷拉异型钢,冷拔异型钢材,定制冷拉型钢,高强度冷拔钢公司推荐
  • 2025 年 11 月 Q355B/Q345B/16Mn 扁钢厂家推荐排行榜,低合金高强度扁钢,结构用扁钢,优质扁钢批发公司推荐
  • 2025 年 11 月 TPU 厂家权威推荐排行榜,TPU加纤,TPU改性生产,专业定制与创新技术实力深度解析
  • 2025 年 11 月红木家具厂家权威推荐榜:交趾黄檀/小叶紫檀/巴里黄檀/缅甸花梨/阔叶黄檀,明清古典榫卯工艺高端定制全屋整装,白胚烘干实力解析
  • OI 笑传 #29
  • 2025 年 11 月 Q355B/Q345B/16Mn 圆钢厂家推荐排行榜,低合金高强度圆钢,结构用圆钢,合金钢圆钢公司精选
  • 2025 年 11 月磨粉机厂家推荐排行榜,雷蒙磨粉机,环辊磨粉机,摆式磨粉机,矿石磨粉机,超细磨粉机,高压磨粉机,大型磨粉机公司推荐
  • 2025 年 11 月冠晶石厂家推荐排行榜,外墙冠晶石,内墙冠晶石,防霉冠晶石,水包水冠晶石,水包砂冠晶石,耐污冠晶石,自洁冠晶石公司推荐
  • 2025 年 11 月保洁公司推荐排行榜,驻场保洁,钟点保洁,开荒保洁,外包保洁,商场/办公楼/工厂/医院/企业保洁服务公司精选
  • 2025 年 11 月防腐工程厂家推荐排行榜,喷砂,热喷锌,热喷铝,油漆涂装,热喷耐磨材料,防腐工程公司精选