本文版权归作者所有,仅供用来网上学习来用,读者可以收藏,请不要下载到本机和重新发布到其它网站
有觉得可以改进的,请留言,也可加群讨论71326533
近日,用到自定义的class loader,加载Jar包中的。此类是最简单实现,由于考虑到所编的程序将用于手机上,可能URLClassLoader在J2ME或Android平台上没有,因此,做了一版本直接继承于java.lang.ClassLoader的。不再放入博客中了。
-----基于java.net.URLClassLoader的实现---------------------------
代码如下:
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
public class EngineClassLoader extends URLClassLoader {
public EngineClassLoader() {
this(getSystemClassLoader());
}
public EngineClassLoader(ClassLoader parent) {
super(new URL[] {}, parent);
}
public void addURL(URL... urls) {
if (urls != null) {
for (URL url : urls) {
super.addURL(url);
}
}
}
public void addFile(File... files) throws IOException {
if (files != null) {
for (File file : files) {
if (file != null) {
super.addURL(file.toURI().toURL());
}
}
}
}
}
测试类代码
import java.io.File;
public class ClassLoaderTest {
public static final String ZIP_PATH = "G:/Lib/Quaqua 3.9.4/lib/quaqua.jar";
public static void main(String[] args) throws Throwable {
EngineClassLoader loader1 = new EngineClassLoader();
loader1.addURL(new File(ZIP_PATH).toURI().toURL());
Class<?> clazz1 = loader1.loadClass("ch.randelshofer.quaqua.AnimatedBorder");
EngineClassLoader loader2 = new EngineClassLoader();
loader2.addURL(new File(ZIP_PATH).toURI().toURL());
Class<?> clazz2 = loader2.loadClass("ch.randelshofer.quaqua.AnimatedBorder");
System.out.println(clazz1 == clazz2);
}
}
分享到:
相关推荐
类加载器 以下代码是一个自定义类加载器,它从 jar 文件加载类。
类加载器是Java最强大的特征之一。但是开发者常常忘记类加载组件。类加载器是在运行时负责寻找和加载类...默认状态下,应用程序的每个类由java.lang.ClassLoader加载。因为它可以被继承,所以可以自由地加强其功能。
基于自定义Classloader实现类的动态加载和卸载:需要设计加载和卸载。 基于自定义Classloader实现模块化机制:需要设计模块化机制。 使用xar作为模块,实现xar动态加载和卸载:综合应用前面的内容。 NIO 常规 使用 ...
主要原因是JVM需要加载rt.jar,不管其中的类是否被classloader加载,第一步整个jar都会被JVM加载到内存当中去,模块化可以根据模块的需要加载程序运行需要的class。 在引入了模块系统之后,JDK 被重新组织成 94 ...
3):从jar、zip等等压缩文件加载类,自动解析jar文件找到class文件去加载util类 4):从java源代码文件动态编译成为class文件 当一个类被加载、连接、初始化后,它的生命周期就开始了,当代表该类的Class对象不再...
ClassLoaderTest 测试自定义的URLClassLoader以加载类 测试如何正确关闭类加载器。 测试如何使用反射关闭JarFile来修复资源泄漏。
13. 自定义ClassLoader 13 14. double保留两位数的两个方案 18 16. 用户输入输出,文件输入输出范例(1) 19 17.以指定符号分割显示 22 17. 单例模式 22 18. 工厂模式 23 19. 读取配置文件(1) 25 20. 根据libName动态...
构建: ./make-jar.sh 要使用,将indexed-classpath.jar添加到类路径并设置-Djava.system.class.loader=org.pantsbuild.classloader.IndexedURLClassLoader 。 添加-verbose:class以查看来自类加载器的调试信息。
栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。 堆是栈的一个组成元素 19、forward 和redirect的区别 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL...
加载YAML ii. 23.6.2. 在Spring环境中使用YAML暴露属性 iii. 23.6.3. Multi-profile YAML文档 iv. 23.6.4. YAML缺点 vii. 23.7. 类型安全的配置属性 i. 23.7.1. 第三方配置 ii. 23.7.2. 松散的绑定(Relaxed ...
jmtrace本项目实现了一个面向Java程序...在transformer中,首先排除由Boostrap Classloader的类, java包中的类和sun包中的类,然后使用适配器设计模式将其作为ClassReader的对象修改为自定义类ClassAdapter的实例。在
栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。 堆是栈的一个组成元素 22、forward 和redirect的区别 forward是服务器请求资源,服务器直接访问目标地址的URL,把...