嘛, 直接上代码

  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. Programming Entity Framework 翻译

    刚开始接触.net,c#语法应该说还没掌握好.学习实践的旅程就从linq和EF开始吧.感觉相比之前的开发方式,linq和EF方便好多. linq入门用了好久,因为c#不行,补习了2.0的泛型,3.0和 ...

  2. Foundation ----->NSNumber

    /*--------------------NSNumber--------------------*/     //包装基本数据类型          //1.创建number对象     //12 ...

  3. rabbitMQ学习(四)

    按照routing key接收信息 发送端: public class EmitLogDirect { private static final String EXCHANGE_NAME = &quo ...

  4. phpstorm 16.1 注册码

    phpstorm 2016.1 的注册与phpstorm 10 相同,可以采用:“服务器注册” 方式进行注册,又快又方便. 服务器注册:http://idea.qinxi1992.cn IDEA 20 ...

  5. python---进程、线程

    一.进程 二.线程 1,使用Thread类创建线程 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'zhoufeng' impor ...

  6. 动态组合lambda 表达式

    //记录实体集合—动态组合lambda 表达式 Expression<Func<AdEntity, bool>> thirdWhere = p => p.Observer ...

  7. Generate SQL from Excel

    Tips:   SUBSTITUTE(D4,"'","''")---if D4 contain ', this function will convert ' ...

  8. spark配置lzo

    spark1.0版本 spark-env.sh中 export SPARK_LIBRARY_PATH=$SPARK_LIBRARY_PATH:/soft/hadoop/lzo/lib/export S ...

  9. python学习心得第一章

    初始python 1什么是程序 计算机程序是一组执行某种动作的的指令.和那些电路.芯片.显卡.硬盘等不同,它不是计算机本身可以触摸的部分,而是隐藏在背后运行在硬件上面的东西.程序就是一系列告诉没有知觉 ...

  10. leetcode 6. ZigZag Conversion

    https://leetcode.com/problems/zigzag-conversion/ 题目: 将字符串转化成zigzag模式. 例如 "abcdefghijkmlnpq" ...