读书人

热加载-代码

发布时间: 2012-12-19 14:13:14 作者: rapoo

热加载--代码

入口类:

public static void main(String[] args) {while (true) {try {FileClassLoader a = new FileClassLoader("E:\\workspace-nfjd\\testrealpath\\WebContent\\WEB-INF\\classes\\");Object foo = a.findClass("Foo").newInstance();Method m = foo.getClass().getMethod("sayHello", new Class[] {});m.invoke(foo, new Object[] {});} catch (Exception ex) {ex.printStackTrace();}try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}}

?自己的类加载器:

public class FileClassLoader extends ClassLoader {/** * @param drive */public FileClassLoader(String drive) {super();this.drive = drive;}public   String drive = "E:\\workspace-nfjd\\classLoader\\bin\\";public   String fileType = ".class";public Class findClass(String name) {byte[] data = loadClassData(name);return defineClass(name, data, 0, data.length);}public byte[] loadClassData(String name) {FileInputStream fis = null;byte[] data = null;try {fis = new FileInputStream(new File(drive + name + fileType));ByteArrayOutputStream baos = new ByteArrayOutputStream();int ch = 0;while ((ch = fis.read()) != -1) {baos.write(ch);}data = baos.toByteArray();} catch (IOException e) {e.printStackTrace();}return data;}/** * @param string */public void setPath(String string) {this.drive=string;}}

?

测试类:

public class Foo {{System.out.println("212121s111");}public void sayHello() {System.out.println("hhh222");}}

?

相当于是新建了个类加载器, 内存会浪费点,不过原先的加载器会被GC掉。

读书人网 >编程

热点推荐