JAVA Class Loader

来源:互联网 发布:最新手机拍照软件 编辑:程序博客网 时间:2024/05/19 05:03
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;


/**
 * @author zhouushe
 * 
 */
public class MyClassLoader extends ClassLoader {
private String name;


private String path = "d:\\";


private final String fileType = ".class";


public MyClassLoader(String name) {
super();


this.name = name;
}


public MyClassLoader(ClassLoader parent, String name) {
super(parent);


this.name = name;
}


@Override
public String toString() {
return this.name;
}


public String getPath() {
return path;
}


public void setPath(String path) {
this.path = path;
}


@Override
public Class<?> findClass(String name) throws ClassNotFoundException {
byte[] data = this.loadClassData(name);


System.out.println(name);
return this.defineClass(name, data, 0, data.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));


System.out.println(path + name + fileType);
System.out.println(name);


baos = new ByteArrayOutputStream();


int ch = 0;


while (-1 != (ch = is.read())) {
baos.write(ch);
}


data = baos.toByteArray();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
is.close();
baos.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}


return data;
}


public static void test(ClassLoader loader) throws ClassNotFoundException,
InstantiationException, IllegalAccessException {
Class clazz = loader.loadClass("Sample");
Object object = clazz.newInstance();
}


public static void main(String[] args) throws ClassNotFoundException,
InstantiationException, IllegalAccessException {
MyClassLoader loader1 = new MyClassLoader("loader1");
loader1.setPath("d:\\myapp\\serverlib\\");


MyClassLoader loader2 = new MyClassLoader(loader1, "loader2");
loader2.setPath("d:\\myapp\\clientlib\\");


MyClassLoader loader3 = new MyClassLoader(null, "loader3");
loader3.setPath("d:\\myapp\\otherlib\\");


System.out.println("================loader1=================");
MyClassLoader.test(loader1);
System.out.println("================loader2=================");
MyClassLoader.test(loader2);
System.out.println("================loader3=================");
MyClassLoader.test(loader3);
}


}
原创粉丝点击