如何自定义类加载器_网易js加载器下载地址
2023-06-13 09:13:42 时间
1.什么情况下需要自定义类加载器?
(1)隔离加载类:在某些框架内进行中间件与应用的模块隔离,把类加载到不同的环境。比如,某容器框架通过自定义类加载器确保应用中依赖的jar包不会影响到中间件运行时使用的jar包。(jar包之间的冲突的消除)
(2)修改类加载方式:类的加载模型并非强制,除Bootstrap外,其它的加载并非一定要引入,或者根据实际情况在某个时间点进行按需动态加载。
(3)扩展加载源:比如从数据库、网络,甚至是电视机机顶盒进行加载。
(4)防止源码泄露。java代码容易被编译和篡改,可以进行编译加密。那么类加载器也需要自定义,还原加密的字节码。
一个简单的类加载器实现的示例:
步骤:继承ClassLoader,重写findClass()方法,调用defineClass()方法。
public class CustomClassLoader extends ClassLoader {
protected Class<?> findClass(String name) throws ClassNotFoundException {
try {
byte[] result = getClassFromCustomPath(name);
if(result == null) {
throw new FileNotFoundException();
} else {
return defineClass(name, result, 0, result.length );
}
} catch(Exception e) {
e.printStackTrace();
}
throw new ClassNotFoundException(name);
}
private byte[] getClassFromCustomPath(String name) {
// 从自定义路径中加载指定类
return null;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
CustomClassLoader customClassLoader = new CustomClassLoader();
System.out.println(customClassLoader);
try {
Class<?> clazz = Class.forName("One", true, customClassLoader);
Object obj = clazz.newInstance();
System.out.println(obj.getClass().getClassLoader());
} catch(Exception e) {
e.printStackTrace();
}
}
}
理论执行结果:classloader.CustomClassLoader@5e481248
由于中间件一般都有自己的依赖jar包,在同一个工程内引用多个框架时,往往被迫进行类的仲裁。安某种规则jar包的版本被统一指定,导致某些存在包路径、类名相同的情况,就会引起类冲突,导致应用程序出现异常。主流的容器类框架都会自定义加载器,实现不同的中间件之间的类隔离,有效避免了冲突。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
相关文章
- Fabric.js 使用纯色遮挡画布(前景色)
- Rust web 前端库/框架评测,以及和 js 前端库/框架的比较
- 【说站】js Number数据类型的介绍
- 【说站】js不同类型的工厂函数
- Node.js TLSSocket 库里涉及到的证书链的概念简介
- JS面试题-js新增基本数据类型BigInt
- js定时器与延时器_JS做定时器倒计时
- JS对象转数组_js怎么把数组转成对象
- 原生 JS 实现 HTML 转 Markdown ,html2md.js
- get两个js小技能——JS截取视频第一帧&图片转Base64
- 如何使用jscythe并通过Node.js的Inspector机制执行任意JS代码
- 永久免费H5直播点播播放器SkeyeWebPlayer.js实现webrtc流播放
- js获取本机ip地址详解编程语言
- js使用正则表达式判断ip地址详解编程语言
- JS页面事件(非常详细)
- 使用JS操作Oracle数据库探索潜在可能性(js和oracle数据库)
- JS在Oracle中的应用(js如何oracle)
- 用JS操作FRAME中的IFRAME及其内容的实现代码
- CSS和JS标签style属性对照表(方便js开发的朋友)
- Package.js现代化的JavaScript项目make工具
- js延迟加载改变JS的位置加快网页加载速度
- php/js获取客户端mac地址的实现代码
- intro.js页面引导简单用法分享
- js实现简单的星级选择器提交效果适用于评论等
- js获取当前地址JS获取当前URL的示例代码
- js的touch事件的实际引用
- js实现键盘操作实现div的移动或改变的原理及代码
- Js使用WScript.Shell对象执行.bat文件和cmd命令