达内--Java基础进阶――“ClassLoader之二――自定义ClassLoader” (二)

2014-11-24 07:17:15 · 作者: · 浏览: 1
name = "jack.classloader.test." + name;

return defineClass(name, data, 0, data.length);

}

private byte[] loadClassData(String name){

byte [] data = null;

try {

URL urlRemote = new URL("http:// www.2cto.com /test/" + name + ".class");//须保证远程文件地址可达

URLConnection uConnection = urlRemote.openConnection();

InputStream inputStream = uConnection.getInputStream();

int length = uConnection.getContentLength();

data = new byte[length];

inputStream.read(data);

inputStream.close();

return data;

} catch (Exception e) {

System.out.println(name +"类没有找到!");

e.printStackTrace();

}

return data;

}

}
3.MyApp.java
package jack.classloader.own;

import jack.classloader.own.local.FileClassLoader;

import jack.classloader.own.remote.RemoteClassLoader;

import jack.classloader.test.IService;

public class MyApp {

/**

* @param args

* @throws IllegalAcces***ception

* @throws InstantiationException

*/

@SuppressWarnings("unchecked")

public static void main(String[] args) throws InstantiationException, IllegalAcces***ception {

//local

FileClassLoader loader = new FileClassLoader();

Class< > objClass = loader.findClass("jack.classloader.test.Service");

IService service = (IService)objClass.newInstance();

System.out.println(objClass.getName());

System.out.println(objClass.getClassLoader());

System.out.println(service);

service.service();

System.out.println();

//remote

RemoteClassLoader remoteLoader = new RemoteClassLoader();

Class< > objClassRemote = remoteLoader.findClass("Service");

IService serviceRemote = (IService)objClassRemote.newInstance();

serviceRemote.service();

}

}


摘自 sdtarena