java重新加载class,DynamicClassLoader 动态加载/重新(动态)加载 class,,运行期重新加载一个已经加...

DynamicClassLoader 动态加载/重新(动态)加载 class,,运行期重新加载一个已经加

运行期重新加载一个已经加载过的class,必须重新new一个DynamicClassLoader对象进行加载,java规范中规定,同一个ClassLoader对象中只能加载一次相同的class

DynamicClassLoader.javapackage libra.law.util;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;public class DynamicClassLoader extends ClassLoader {public DynamicClassLoader(ClassLoader parent) { super(parent);}@SuppressWarnings("unchecked")public Class loadClass(String classPath, String className) throws ClassNotFoundException { try { String url = classPathParser(classPath) + classNameParser(className); System.out.println(url); URL myUrl = new URL(url); URLConnection connection = myUrl.openConnection(); InputStream input = connection.getInputStream(); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); int data = input.read(); while (data != -1) { buffer.write(data); data = input.read(); } input.close(); byte[] classData = buffer.toByteArray(); return defineClass(noSuffix(className), classData, 0, classData.length); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null;}private String pathParser(String path) { return path.replaceAll("\\\\", "/");}private String classPathParser(String path) { String classPath = pathParser(path); if (!classPath.startsWith("file:")) { classPath = "file:" + classPath; } if (!classPath.endsWith("/")) { classPath = classPath + "/"; } return classPath;}private String classNameParser(String className) { return className.substring(0, className.lastIndexOf(".")).replaceAll( "\\.", "/") + className.substring(className.lastIndexOf("."));}private String noSuffix(String className) { return className.substring(0, className.lastIndexOf("."));}public static void main(String[] arguments) throws Exception { String classPath = "C:\\Documents and Settings\\Administrator\\Workspaces\\MyEclipse7.5\\lhsp\\web\\WEB-INF\\classes"; String className = "libra.law.util.Test.class"; new DynamicClassLoader(DynamicClassLoader.class.getClassLoader()) .loadClass(classPath, className).newInstance();}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值