/**
*
*/
package com.bzu.csh;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
/**
*
* 项目名称:Test1 类名称:Test2 类描述: 创建人:admin 创建时间:2017年1月7日 下午9:41:36 修改人:admin
* 修改时间:2017年1月7日 下午9:41:36 修改备注:
*
* @version
*
*/
public class MyClassLoader extends ClassLoader {
private String name;
private String path = "d:\\";
private final String fileType = ".class";
public MyClassLoader(String name) {
super();// system加载器为父加载器
this.name = name;
}
public MyClassLoader(ClassLoader parent, String name) {
super(parent);// 显示指定该类加载器的父加载器
this.name = name;
}
/**
* ClassLoader API中找到的
*/
public Class<?> findClass(String name) {
byte[] b = loadClassData(name);
return defineClass("com.bzu.csh." + name, b, 0, b.length);
}
private byte[] loadClassData(String name) {
InputStream is = null;
byte[] data = null;
ByteArrayOutputStream baos = null;
try {
// 转换. --> /
this.name = this.name.replace(".", "/");
is = new FileInputStream(new File(path + name + fileType));
baos = new ByteArrayOutputStream();
int ch = 0;
while (-1 != (ch = is.read())) {
baos.write(ch);
}
data = baos.toByteArray();
} catch (Exception e) {
} finally {
try {
is.close();
baos.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
return data;
}
public static void main(String[] args) throws Exception {
MyClassLoader loader = new MyClassLoader("loader1");// 父加载器为sysout加载器
loader.setPath("d:\\myapp\\myclass\\");
MyClassLoader loader1 = new MyClassLoader(loader, "loader1");// 父加载器器为loader
loader1.setPath("d:\\myapp\\myclass\\");
MyClassLoader loader2 = new MyClassLoader(null, "loader2");// 父加载器为bootstrap加载器
loader2.setPath("d:\\myapp\\myclass\\");
// test(loader);
// test(loader1);
test(loader2);
}
public static void test(ClassLoader loader) throws InstantiationException,
IllegalAccessException, ClassNotFoundException {
Class clazz = loader.loadClass("Sample");
Object instance = clazz.newInstance();
}
@Override
public String toString() {
return this.name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getFileType() {
return fileType;
}
}
/**
*
*/
package com.bzu.csh;
/**
*
* 项目名称:Test1 类名称:Sample 类描述: 创建人:admin 创建时间:2017年1月8日 下午3:31:16 修改人:admin
* 修改时间:2017年1月8日 下午3:31:16 修改备注:
*
* @version
*
*/
public class Sample {
public int v1 = 1;
public Sample() {
System.out.println("Sample is loading"
+ this.getClass().getClassLoader());
}
}