动态加载jar包中的类(方式一)
嘛, 直接上代码
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包中的类(方式一)的更多相关文章
- java动态加载jar包,并运行其中的类和方法
动态加载jar包,在实际开发中经常会需要用到,尤其涉及平台和业务的关系的时候,业务逻辑部分可以独立出去交给业务方管理,业务方只需要提供jar包,就能在平台上运行. 下面通过一个实例来直观演示: 第一: ...
- JAVA动态加载JAR包的实现
如何动态的加载这些驱动!不可能把所有的数据库驱动都集成到JAR包中吧?!于是动态加载驱动的JAR包就产生了!其实这些在做系统基础代码时,经常用到,只是一般我们没有机会去搞而已. 动态加载JAR包,使用 ...
- spring加载jar包中多个配置文件(转)
转自:http://evan0625.iteye.com/blog/1598366 在使用spring加载jar包中的配置文件时,不支持通配符,需要一个一个引入,如下所示: Java代码 <co ...
- 动态加载jar包(二)
上次说的加载jar包,有几个问题没有解决: 1.如果项目包含了其他的jar包如何解决? 2.如何规范上传的jar包的类和方法? 下面就解决一下上面两个问题 一.首先编写被调用的类,这次使用maven工 ...
- 动态加载jar包(一)
一.编写被调用的类 package com.qunar.helloworld; public class HelloWorld { public String sayHello(){ return ( ...
- 深入浅出Android动态加载jar包技术
在实际项目中,由于某些业务频繁变更而导致频繁升级客户端的弊病会造成较差的用户体验,而这也恰是Web App的优势,于是便衍生了一种思路,将核心的易于变更的业务封装在jar包里然后通过网络下载下来,再由 ...
- JAVA动态加载JAR包执行程序
入口代码 import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.ne ...
- Java动态加载JAR包
参考代码: package org; import java.io.File; import java.net.URL; import java.net.URLClassLoader; import ...
- spring加载jar包中多个配置文件
转自:http://www.cnblogs.com/GarfieldTom/p/3723915.html <import resource="classpath*:applicatio ...
随机推荐
- php web 信息采集
<?php /** * 可以灵活配置使用的采集器 * 作者:Rain * 创建时间:2015-02-03 15:17:30 * 版本信息:V1.0 */ //////////////////// ...
- java利用Aspose.slides.jar将本地ppt文档转化成pdf(完美破解版 无水印 无中文乱码)
下载aspose.slides-15.9.0.jar包 http://pan.baidu.com/s/1jH3ZNbK JAVA代码 package webViewer; import java.io ...
- javascript知识点总结----Function定义
---恢复内容开始--- 函数Function: 函数实际上是对象,每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法,函数名实际上是一个指向函数的指针,不会与某个函数绑定 ...
- NodeJs 连接mysql一例。
var mysql = require('mysql'); var connection = mysql.createConnection({ host :'127.0.0.1', user :'ro ...
- jenkins调度selenium脚本不打开浏览器解决办法
原文地址: http://blog.csdn.net/achang21/article/details/45096003 The web browser doesn't show while run ...
- Hcm data loader for cancel work relationship
好好总结一下这个task.没有做好的东西:1.现有的资料和各种各样的工具没有很好的利用起来,造成了用了很多的时间去了解和自己学习.非常的不舒服的.下次要避免这样的浪费时间,学会在工作中学习.现在以及以 ...
- XproerUI控件工厂代码优化-使用C++11特性优化
优化前的代码,比较冗余,通常实现一个工厂类的创建器需要三个步骤. 代码截图: 优化后的代码,更简洁,对开发人员更加友好,实现一个工厂类创建器只需要一个步骤. 代码截图:
- WPF 大数据加载过程中的等待效果——圆圈转动
大家肯定遇到过或将要遇到加载大数据的时候,如果出现长时间的空白等待,一般人的概念会是:难道卡死了? 作为一个懂技术的挨踢技术,即使你明知道数据量太大正在加载,但是假如看不到任何动静,自己觉得还是一种很 ...
- maven 的使用
下载Maven:http://maven.apache.org/ 解压 将解压目录的bin 子目录配置到 PATH中 4) 在命令行下运行 mvn -version 或者 mvn -v 来测试是否 ...
- javascript [object,Object]
今天给html标签的属性赋值为对象时,发现取出来的值为 [object,Object],感觉有点奇怪. 代码如下: <!DOCTYPE html> <html> <hea ...