MyClassLoader.java
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class MyClassLoader extends ClassLoader {
private String name;
private String path = "d:/";
private String fileType = ".class";
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public MyClassLoader(String name){
super();
this.name = name;
}
public MyClassLoader(ClassLoader parent,String name){
super(parent);
this.name = name;
}
@SuppressWarnings("deprecation")
@Override
public Class<?> findClass(String name) throws ClassNotFoundException {
byte[] data = classToByteArray(name);
return data!=null ? defineClass(data, 0, data.length):null;
}
public byte[] classToByteArray(String name){
name = name.replace(".", "/");
File file = new File(path+name+fileType);
if(!file.exists())return null;
InputStream is = null;
ByteArrayOutputStream baos = null;
byte[] data = null;
try{
is = new FileInputStream(file);
baos = new ByteArrayOutputStream();
int a =0;
while(-1 != (a = is.read())){
baos.write(a);
}
data = baos.toByteArray();
}catch(Exception e){
e.printStackTrace();
}finally{
try {
baos.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return data;
}
public static void main(String[] args)throws Exception {
MyClassLoader loader1 = new MyClassLoader("loader1");
loader1.setPath("d:/loader/loader1/");
MyClassLoader loader2 = new MyClassLoader(loader1,"loader2");
loader2.setPath("d:/loader/loader2/");
MyClassLoader loader3 = new MyClassLoader(null,"loader3");
loader3.setPath("d:/loader/loader3/");
Class clazz = loader2.loadClass("Person");
Class clazz1 = loader3.loadClass("Person");
clazz.newInstance();
clazz1.newInstance();
}
@Override
public String toString() {
return this.name;
}
}
Person.java
public class Person {
public Person(){
System.out.println("Person class is init by : " +this.getClass().getClassLoader());
new Dog();
}
}
Dog.java
public class Dog {
public Dog(){
System.out.println("Dog class is init by : " +this.getClass().getClassLoader());
}
}