• URLClassLoader使用方法及事例程序


    参考文献:http://blog.csdn.net/shixin1198/article/details/3733948

    1.使用概要:

    File file = new File(jar文件全路径);
    URL url = file.toURL();
    URLClassLoader loader = new URLClassLoader(new URL[] { url });
    Class tidyClazz = loader.loadClass(所需class的含包名的全名);

    2.详细说明:

    我们知道,Java利用ClassLoader将类载入内存,并且在同一应用中,可以有很多个ClassLoader,通过委派机制,把装载的任务传递给上级的装载器的,依次类推,直到启动类装载器(没有上级类装载器)。如果启动类装载器能够装载这个类,那么它会首先装载。如果不能,则往下传递。当父类为null时,JVM内置的类(称为:bootstrap class loader)就会充当父类。想想眼下的越来越多用XML文件做配置文件或者是描述符、部署符。其实这些通过XML文档描述的配置信息最终都要变成Java类,基实都是通过ClassLoader来完成的。URLClassLoader是ClassLoader的子类,它用于从指向 JAR 文件和目录的 URL 的搜索路径加载类和资源。也就是说,通过URLClassLoader就可以加载指定jar中的class到内存中。
    下面来看一个例子,在该例子中,我们要完成的工作是利用URLClassLoader加载jar并运行其中的类的某个方法。
    (1)创建java project:URLClassLoaderTest0,定义一个接口,使所有继承它的类都必须实现action方法,如下:
    完成后将其打包为testInterface.jar文件。
    (2)接下来新建java project:URLClassLoaderTest1,为了编译通过,引入之前打好的testInterface.jar包。并创建TestAction类,使它实现ActionInterface接口。如下:
    完成后将其打包为test.jar,放在d盘根目录下。下面要做的就是利用URLClassLoader加载并运行TestAction的action方法,并将返回的值打印在控制台上。
    (3)新建java project:URLClassLoaderTest2,引入testInterface.jar包。并创建一可执行类(main方法),在其中加入如下代码:
    该代码先在该工程下建立一个文件rtext.txt,用来存储需要加载的jar的路径(路径为:file:d:/Test.jar),实现时,读取一条路径,加载一个

    运行结果:

    注意点:

    前面打包的jar包的名字不能跟类名相同,比如不能起名为TestAction.jar和ActionInterface.jar

    作者:xwdreamer
    欢迎任何形式的转载,但请务必注明出处。
    分享到:
  • 相关阅读:
    设计模式之工厂模式(Factory Pattern)用C++实现
    读书笔记之Effective C++ 1.让自己习惯C++
    LeetCode之RemoveDuplicates扩展
    一致性哈希(Consistent Hashing)原理和实现(整理)
    LeetCode之Remove Duplicates from Sorted Array
    C++小结
    HTTP、HTTP1.0、HTTP1.1、HTTP2.0——笔记
    《趣谈网络协议》——问答笔记
    技术源于生活(头脑风暴)
    解决:未能加载文件或程序集“System.Web.Http, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
  • 原文地址:https://www.cnblogs.com/xwdreamer/p/2296918.html
Copyright © 2020-2023  润新知