如何自定义类加载器_网易js加载器下载地址

如何自定义类加载器_网易js加载器下载地址1.什么情况下需要自定义类加载器?(1)隔离加载类:在某些框架内进行中间件与应用的模块隔离,把类加载到不同的环境。比如,某容器框架通过自定义类加载器确保应用中依赖的jar包不会影响到中间件运行时使用的jar包。(jar包之间的冲突的消除)(2)修改类加载方式:类的加载模型并非强制,除Bootstrap外,其它的加载并非一定要引入,或者根据实际情况在某个时间点进行按需动态加载。(3)扩展…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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包的版本被统一指定,导致某些存在包路径、类名相同的情况,就会引起类冲突,导致应用程序出现异常。主流的容器类框架都会自定义加载器,实现不同的中间件之间的类隔离,有效避免了冲突。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196859.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python 微信自动回复机器人

    python 微信自动回复机器人python微信自动回复机器人导入wxautohttps://github.com/cluic/wxauto#!python3#-*-coding:utf-8-*-“””Author:tikic@qq.comSource:https://github.com/cluic/wxautoLicense:MITLicenseVersion:3.3.5.3″””fromtokenizeimportNamefromunicodedataimportnameim

    2022年10月1日
    4
  • 操作系统核心原理之内存管理思维导图

    操作系统的两个角色分别是魔术师和管理者,在管理者这个角色中,除了CPU之外,内存是操作系统要管理的另外一个重要资源。内存管理需要达到两个目标:一是地址保护,即一个程序不能访问另一个程序的地址空间。二是

    2021年12月19日
    52
  • Visual SVN Server启动失败0x8007042a错误

    Visual SVN Server启动失败0x8007042a错误

    2021年9月21日
    84
  • 纯CSS3实现动态火车行驶特效

    上次开完飞机,这次开火车查看效果:http://hovertree.com/texiao/css3/7/效果图:代码如下:转自:http://hovertree.com/h/bjaf/hovertr

    2021年12月22日
    49
  • spring 整合 mybatis原理

    spring 整合 mybatis原理SqlSessionFactoryBean的创建1.SqlSessionFactoryBean这个类实现了三个接口,一个是InitializingBean,另一个是FactoryBean,还有就是ApplicationListener接口。下面说明一下实现了这三个接口的,有什么作用InitializingBean接口:实现了这个接口,那么当bean初始化的时候,spring就会调用该接口的实现…

    2022年6月3日
    46
  • 如何把内网IP映射到公网IP

    如何把内网IP映射到公网IP 鸽子出品2017-12-0522:28:22我们讲了如何搭建网站,可是有很多小伙伴私信跟我说怎么映射,今天我就教大家如何把内网地址映射到公网!我们所需要的工具有: 内网IP(这个是品,也是必有的!) nat123(这是映射软件,百度上都能搜索到) 有些小伙伴会问: 这个软件是什么操作系统啊? 这个软件免费吗? 当然官网上有windows版…

    2022年5月18日
    127

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号