Java动态类加载器(加载外部jar包类 读取资源文件)
来源:互联网 发布:淘宝卖家物流费用标准 编辑:程序博客网 时间:2024/06/06 13:59
Code:
package xx.xx.xx
import java.io.IOException;
import java.io.InputStream;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 动态类加载器
*
*/
public class DynamicJarClassLoader extends ClassLoader {
private static Logger logger = LoggerFactory.getLogger(DynamicJarClassLoader.class);
private JarFile jarFile;
private ClassLoader parent;
public DynamicJarClassLoader(JarFile jarFile) {
super(Thread.currentThread().getContextClassLoader());
this.parent = Thread.currentThread().getContextClassLoader();
this.jarFile = jarFile;
}
public DynamicJarClassLoader(JarFile jarFile, ClassLoader parent) {
super(parent);
this.parent = parent;
this.jarFile = jarFile;
}
@Override
protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
try {
Class<?> c = null;
String path = name.replace('.', '/').concat(".class");
if(null != jarFile){
JarEntry entry = jarFile.getJarEntry(path);
if(null != entry){
InputStream is = jarFile.getInputStream(entry);
int availableLen = is.available();
int len = 0;
byte[] bt1 = new byte[availableLen];
while (len < availableLen) {
len += is.read(bt1, len, availableLen - len);
}
c = defineClass(name, bt1, 0, bt1.length);
if (resolve) {
resolveClass(c);
}
}else{
if (parent != null) {
return parent.loadClass(name);
}
}
}
return c;
} catch (IOException e) {
throw new ClassNotFoundException("Class " + name + " not found.");
}
}
@Override
public InputStream getResourceAsStream(String name) {
InputStream is = null;
try {
if(null != jarFile){
JarEntry entry = jarFile.getJarEntry(name);
if (entry != null) {
is = jarFile.getInputStream(entry);
}
if (is == null) {
is = super.getResourceAsStream(name);
}
}
} catch (IOException e) {
logger.error(e.getMessage());
}
return is;
}
}
- Java动态类加载器(加载外部jar包类 读取资源文件)
- Android动态加载外部jar包及jar包中图片等资源文件
- 运用URLClassLoader加载外部jar包的java类,生成Class文件
- 运用URLClassLoader加载外部jar包的java类,生成Class文件
- 【java】自定义ClassLoader 加载外部类和jar文件
- java动态加载jar包
- java动态加载jar包
- java动态加载jar包
- JAVA动态加载JAR包
- Java 动态加载jar包
- Java动态加载jar文件
- java加载jar包中的库资源
- java 源代码中动态加载JAR文件中的类
- Java 从Jar文件中动态加载类
- Struts2加载外部jar包
- Java运行时动态加载类之ClassLoader加载class及其依赖jar包
- 实现java classloader 动态加载jar包
- 读取jar包外部文件
- linux网络编程
- 实现拉绳效果(类似UC浏览器首页效果)
- 部分常用sql,适用于oracle
- android listView 深入探讨
- C#学习笔记一 基础知识点整理
- Java动态类加载器(加载外部jar包类 读取资源文件)
- linux上同步文件夹
- Leetcode 111. Minimum Depth of Binary Tree
- 移动客户端中高效使用 SQLite
- 数据当中含有双引号,用jstl表达式为表单赋值时出错
- php通过PO连接SAP的接口
- linux获取/查看本机出口ip
- JS自定义事件的定义和触发(createEvent, dispatchEvent)
- Centos - 重装git