嘛, 直接上代码

  public static class TestClassLoader extends ClassLoader {
@Override
protected Class<?> loadClass(String className, boolean resolve) throws ClassNotFoundException {
if (className.startsWith("com.squareup.okhttp")) {
return loadOkHttp(className);
}
return super.loadClass(className, resolve);
} private Class<?> loadOkHttp(String className) throws ClassNotFoundException {
String jarPathstr = "";
String jarPathstr2 = "";
StringBuilder sb = new StringBuilder();
sb.append(System.getProperty("user.dir"))
.append(File.separator).append("doc").append(File.separator)
.append("jar").append(File.separator);
jarPathstr = sb.toString() + "okhttp-1.2.1.jar";
jarPathstr2 = sb.toString() + "okhttp-protocols-1.2.1.jar";
InputStream inputStream = null;
byte[] clazzs = null;
try {
JarFile jarFile = new JarFile(jarPathstr);
String path = className.replaceAll("\\.", "/") + ".class";
JarEntry entry = jarFile.getJarEntry(path);
if (entry == null) {
jarFile = new JarFile(jarPathstr2);
entry = jarFile.getJarEntry(path);
}
if (entry == null) {
throw new ClassNotFoundException(className + " Not Found!!");
} inputStream = jarFile.getInputStream(entry);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buff = new byte[];
int len = ;
while ((len = inputStream.read(buff)) != -) {
baos.write(buff, , len);
}
baos.close();
clazzs = baos.toByteArray();
} catch (IOException e) { } finally {
Util.close(inputStream);
} return defineClass(className, clazzs, , clazzs.length);
} }

这个类加载器的作用是, 如果加载的类前缀为 com.squareup.okhttp, 那么就重项目的根目录的doc/jar/下的okhttp-1.2.1.jar和okhttp-protocols-1.2.1.jar中去加载。

注意jar包是一个归档文件, 里面的实例名称是这样的

所以类名className对应的实例名为 className.replaceAll("\\.", "/") + ".class"

动态加载jar包中的类(方式一)的更多相关文章

  1. java动态加载jar包,并运行其中的类和方法

    动态加载jar包,在实际开发中经常会需要用到,尤其涉及平台和业务的关系的时候,业务逻辑部分可以独立出去交给业务方管理,业务方只需要提供jar包,就能在平台上运行. 下面通过一个实例来直观演示: 第一: ...

  2. JAVA动态加载JAR包的实现

    如何动态的加载这些驱动!不可能把所有的数据库驱动都集成到JAR包中吧?!于是动态加载驱动的JAR包就产生了!其实这些在做系统基础代码时,经常用到,只是一般我们没有机会去搞而已. 动态加载JAR包,使用 ...

  3. spring加载jar包中多个配置文件(转)

    转自:http://evan0625.iteye.com/blog/1598366 在使用spring加载jar包中的配置文件时,不支持通配符,需要一个一个引入,如下所示: Java代码 <co ...

  4. 动态加载jar包(二)

    上次说的加载jar包,有几个问题没有解决: 1.如果项目包含了其他的jar包如何解决? 2.如何规范上传的jar包的类和方法? 下面就解决一下上面两个问题 一.首先编写被调用的类,这次使用maven工 ...

  5. 动态加载jar包(一)

    一.编写被调用的类 package com.qunar.helloworld; public class HelloWorld { public String sayHello(){ return ( ...

  6. 深入浅出Android动态加载jar包技术

    在实际项目中,由于某些业务频繁变更而导致频繁升级客户端的弊病会造成较差的用户体验,而这也恰是Web App的优势,于是便衍生了一种思路,将核心的易于变更的业务封装在jar包里然后通过网络下载下来,再由 ...

  7. JAVA动态加载JAR包执行程序

    入口代码 import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.ne ...

  8. Java动态加载JAR包

    参考代码: package org; import java.io.File; import java.net.URL; import java.net.URLClassLoader; import ...

  9. spring加载jar包中多个配置文件

    转自:http://www.cnblogs.com/GarfieldTom/p/3723915.html <import resource="classpath*:applicatio ...

随机推荐

  1. 笔试常考的Java基础

    1. Socket编程:ServerSocket (int port) :Creates a server socket, bound to the specified port. Socket(In ...

  2. 转 LoadRunner 技巧之协议分析

    在做性能测试的时候,协议分析是困扰初学者的难题,选择错误的协议会导致Virtual User Generator 录制不到脚本:或录制的脚本不完整,有些应用可能需要选择多个协议才能完整的记录 客户端与 ...

  3. C++中extern关键字用法小结

    总结C++中关于extern关键字的用法. 1.变量的生明和定义中 C++语言支持分离式编译机制,该机制允许将程序分割为若干个文件,每个文件可被独立编译.为了将程序分为许多文件,则需要在文件中共享代码 ...

  4. Scala

    简直就是java啊,mac上,下载,添加环境变量,source 就好了

  5. eclipse:不能在tomcat里添加一个项目的解决方法

    Cannot add a project to a tomcat server in eclipse You didn't create your project as "Dynamic W ...

  6. note->notice

    登陆博客园,乍眼一看上一篇博客的日期还是2月底,如今已是5月份,期间好几次想要记录一些东西,总感觉现在一天二十四小时越来越短,有几次登陆博客园甚至连密码都要重置一下才能登陆...这两个月的时间里经理了 ...

  7. 使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单

    设置防火墙策略时,关于SSH:22访问权限,我们常常会设置服务器只接受某个固定IP(如公司IP)访问,但是当我们出差或在家情况需要登录服务器怎么办呢? 常用两种解决方案:1.通过VPN操作登录主机: ...

  8. nagios二次开发(一)---开发思想

    NAGIOS现状   从nagios的官网http://www.nagios.org/及其它已经公开的资料,我们可以知道:在web UI层nagios只提供了给我们查看图形界面的操作,界面上有简单的启 ...

  9. eclipse 3.6 + tomcat 6.0 开发SSH框架学习

    1. 下载JDK 1.6.0.35 http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html 下载之后 ...

  10. Linux Svn 安装过程及配置

    重要的是第一步的安装,第二步配置可能没用,但是没试过,因为服务器上已经安装了第一步. 此处的第二步只为做个记录,说明一下里边的配置文件的用途. 3. 自己实际操作中的的配置记录(参照服务器别人的配置记 ...