动态加载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 ...
随机推荐
- ping命令
ping命令能够用于判断一个主机是否可达或者是否存活.它的工作原理就像潜水艇的探测原理一样.该命令通过向目标计算机发送一个数据包,请求目标计算机回送该数据包以表明自己还存活着.同时该命令还能够知道数据 ...
- Nginx 和 PHP的安装配置
1.安装PHP(注意系统默认安装了php,要安装高版本之前最好卸载旧版本,因为这个原因纠结了四个小时) ./configure \ --prefix=/usr/local/php \ --exec-p ...
- js中function参数默认值
--在dreamweaver做网站时,函数定义是在一个*.js文件中,其中定义了一个func,有四个参数,function func(string1,url,flag,icon),然后在另一个asp中 ...
- jsPlumb的简单使用
jsPlumb概述jsPlumb是一个在dom元素之间绘制连接线的javascript框架,它使用svg技术绘制连接线. 基本概念很明显,一个连线主要要解决的问题包括谁和谁连,在哪里连(连接点在哪里) ...
- JAVA反射实践
Java反射机制在我的理解当中就是下面几点: 1. 对一个给定的类名(以字符串形式提供)能动态构建一个对象实例 2. 对于任意一个类,都能够知道这个类的所有属性和方法 3. 对于任意一个对象, ...
- Graded Browser Support
( The YUI Target Environments Matrix is here) About the Browser Test Baseline and Operating Systems ...
- JavaScript DOM编程艺术读书笔记(二)
第五章 最佳实践 平稳退化(graceful degradation):如果正确使用了JavaScript脚本,可以让访问者在他们的浏览器不支持JavaScript的情况下仍能顺利地浏览你网站.虽然某 ...
- ubuntu用apt安装apache2时,出现E:未发现软件包 apache2
解决方法:使用sudo apt-get update更新软件包 更新软件包失败,多半使用因为源文件不干净,在/etc/apt下重新自己新写一份源文件 然后执行 sudo apt-get update
- 设置Headers
import urllib import urllib2 url = 'http://www.server.com/login'user_agent = 'Mozilla/4.0 (compatibl ...
- Odoo Web Service API
来自 Odoo Web服务暴露出相关的服务,路由分别是 /xmlrpc/ /xmlrpc/2/ /jsonrpc 根据 services 调用 后端对应服务的 方法method [定义 openerp ...