自定义类加载器classLoader
Posted 徒手攀岩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义类加载器classLoader相关的知识,希望对你有一定的参考价值。
package cn.bdqn.userconsumer;
import java.io.*;
/**
* 自定义classLoader 类加载器
*/
public class HelloClassLoad extends ClassLoader {
/**
* 自定义类加载器
* 继承classLoader 重写findClass()方法
* @param name
* @return
* @throws ClassNotFoundException
*/
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
File file = new File("F:\\\\test",name.replace(".","\\\\").concat(".class"));
try {
FileInputStream inputStream = new FileInputStream(file);
//FileOutputStream fileoutput = new FileOutputStream(new File("F:/test",name.replace(".","/").concat(".class")));
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
int by=0;
while((by = inputStream.read()) !=0){
outputStream.write(by);
}
byte[] bytes = outputStream.toByteArray();
outputStream.close();
defineClass(name,bytes,0,bytes.length);
} catch (Exception e) {
e.printStackTrace();
}
return super.findClass(name);
}
public static void main(String[] args) {
try {
//使用自定义 classLoader
ClassLoader classLoader = new HelloClassLoad();
//加载指定目录下的类文件
Class<?> aClass = classLoader.loadClass("cn.bdqn.userconsumer.HelloJol");
HelloJol helloJol = (HelloJol) aClass.newInstance();
helloJol.Str();
System.out.println(classLoader.getClass().getClassLoader());
System.out.println(classLoader.getParent());
} catch (Exception e) {
e.printStackTrace();
}
}
}
以上是关于自定义类加载器classLoader的主要内容,如果未能解决你的问题,请参考以下文章
JVM16_类的概述分类ClassLoader源码分析自定义类的加载器双亲委派机制沙箱安全机制
ClassLoader实现自定义类加载器加载指定路径下的Class文件和Jar包