创建自定义加载器的类
package com.tuogo.classlocad;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
/**
* 自定义类加载器
*/
public class EncryptionClass extends ClassLoader {
private String srcFile;
public EncryptionClass(String srcFile) {
this.srcFile = srcFile;
}
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
Class<?> loadedClass = findLoadedClass(name);
if (null != loadedClass) {
return loadedClass;
} else {
//采用双亲委托机制 这里使用异常如果出错则继续向下执行
try {
loadedClass = this.getParent().loadClass(name);
} catch (Exception e) {
}
if (loadedClass != null) {
return loadedClass;
} else {
byte[] bytes = getClassDate(name);
if (bytes == null) {
throw new ClassNotFoundException();
}
loadedClass = defineClass(name, bytes, 0, bytes.length);
}
}
return loadedClass;
}
private byte[] getClassDate(String name) {
//获取class的全路径
String file = srcFile + "/" + name.replace(".", "/") + ".class";
ByteArrayOutputStream outputStream = null;
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
outputStream = new ByteArrayOutputStream();
byte[] bytes = new byte[1024];
int tmp = 0;
while ((tmp = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, tmp);
}
return outputStream