X Tutup
package classloader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; public class MyClassLoader extends ClassLoader{ private String name;//the binary name of a class private String path="D:\\"; private final String fileExtendName=".class"; public MyClassLoader(String name){ super();//让系统类加载器成为该类加载器的父加载器 this.name=name; } public MyClassLoader(ClassLoader parent,String name){ super(parent);// this.name=name; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } @Override public String toString() { return this.name; } 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+this.name+fileExtendName)); int ch=0; baos=new ByteArrayOutputStream(); while(-1!=(ch=is.read())){ baos.write(ch); } data=baos.toByteArray(); } catch(Exception e){e.printStackTrace();} finally{ try{ is.close(); baos.close(); } catch(Exception e){e.printStackTrace();} } return data; } @Override protected Class findClass(String name) throws ClassNotFoundException { byte[] data=loadClassData(name); return this.defineClass(name, data, 0, data.length); } public static void main(String[] args) { MyClassLoader loader1=new MyClassLoader("loader1"); MyClassLoader loader2=new MyClassLoader(loader1,"loader2"); MyClassLoader loader3=new MyClassLoader(null,"loader3"); loader1.setPath("f:\\test\\loader1\\"); loader2.setPath("f:\\test\\loader2\\"); loader3.setPath("f:\\test\\loader3\\"); } public static void test(ClassLoader c) throws Exception{ Class clazz=c.loadClass("classloader.Sample"); Object o=clazz.newInstance(); } }
X Tutup