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方法,如下:
- package uRLClassLoaderTest0;
- //定义接口ActionInterface
- public interface ActionInterface {
- public String action();
- }
完成后将其打包为testInterface.jar文件。
(2)接下来新建java project:URLClassLoaderTest1,为了编译通过,引入之前打好的testInterface.jar包。并创建TestAction类,使它实现ActionInterface接口。如下:
- package uRLClassLoaderTest1;
- import uRLClassLoaderTest0.ActionInterface;
- //在项目中导入testInterface.jar这个包,实现接口ActionInterface.jar包名不能为类名
- public class TestAction implements ActionInterface {
- public String action() {
- return "this ActionTest class";
- }
- }
完成后将其打包为test.jar,放在d盘根目录下。下面要做的就是利用URLClassLoader加载并运行TestAction的action方法,并将返回的值打印在控制台上。
(3)新建java project:URLClassLoaderTest2,引入testInterface.jar包。并创建一可执行类(main方法),在其中加入如下代码:
- package uRLClassLoaderTest2;
- import java.net.*;
- import java.io.*;
- import uRLClassLoaderTest0.ActionInterface;//项目中导入testInterface这个包
- public class ClassLoaderTest {
- public static void main(String args[]) {
- try {
- File file = new File("rtest.txt");
- BufferedReader in = new BufferedReader(new FileReader(file));
- String s = new String();
- while ((s = in.readLine()) != null) {
- //从rtest.txt中读取的url,根据url创建类装载器
- URL url = new URL(s);
- s = null;
- URLClassLoader myClassLoader = new URLClassLoader(
- new URL[] { url }, Thread.currentThread().getContextClassLoader());
- System.out.println(myClassLoader);
- Class myClass = myClassLoader.loadClass("uRLClassLoaderTest1.TestAction");
- ActionInterface action = (ActionInterface) myClass.newInstance();
- String str = action.action();
- System.out.println(str);
- //根据url1创建类装载器
- URL url1 = new URL("file:d:/test.jar");
- URLClassLoader myClassLoader1 = new URLClassLoader(
- new URL[] { url1 }, Thread.currentThread().getContextClassLoader());
- Class myClass1 = myClassLoader1.loadClass("uRLClassLoaderTest1.TestAction");
- ActionInterface action1 = (ActionInterface) myClass1.newInstance();
- String str1 = action1.action();
- System.out.println(str1);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
该代码先在该工程下建立一个文件rtext.txt,用来存储需要加载的jar的路径(路径为:file:d:/Test.jar),实现时,读取一条路径,加载一个
运行结果:
- java.net.URLClassLoader@152b6651
- this ActionTest class
- this ActionTest class
注意点:
前面打包的jar包的名字不能跟类名相同,比如不能起名为TestAction.jar和ActionInterface.jar
本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2011/12/05/2296918.html,如需转载请自行联系原作者
URLClassLoader使用方法及事例程序相关推荐
- 为什么通过微服务的方法构建应用程序?
作为软件开发人员,我们已知道思考如何将应用程序因数分解成组件部分. 这是对象导向.软件抽象和组件化的中心模式. 现在,这种因数分解往往以共享库和技术层之间的类与接口呈现. 通常采用一种分层方法,有后端 ...
- 复合数值积分方法以及Python程序实现
■ 前言 在 Composite Numerical Integration 中给出了三种复合数值积分方法它们分别是: Newton-Cotes Formulas 01三种方法的公式及其Python程 ...
- 单片机 10种软件滤波方法的示例程序
单片机学习笔记_10种软件滤波方法的示例程序 假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad(); 1.限副滤波 /* A值可根据实际情况调整 v ...
- 计算机启动应用程序的方法,excel的程序_Excel2010中启动应用程序的三种方法
使用Excel时,需要先启动应用程序,怎么去进行操作启动它?今天,学习啦小编就教大家在Excel2010中启动应用程序的三种方法. Excel2010中启动应用程序的三种步骤如下: 1.开始菜单 在桌 ...
- S7-1200循环中断OB30的使用方法及示例程序
S7-1200循环中断OB30的使用方法及示例程序 OB组织块的类型: 如下表所示,优先级越大,优先级越高 循环中断组织块: 循环中断OB30-OB38以及OB123-OB32767编号的OB. 循环 ...
- TIA博途中通过关键字AT实现变量覆盖的具体方法及示例程序
TIA博途中通过关键字AT实现变量覆盖的具体方法及示例程序 通过关键字 "AT" 可覆盖一个 S7-1200/S7-1500 中已声明的变量. 概述 可以在FB和FC的接口参数区进 ...
- 使用main方法启动spring程序
使用main方法启动spring程序 在 spring 框架中,由于对象都交给了 IoC 容器进行管理,那么直接在 main 方法中创建 service 层对象,就会出现空指针异常(NPE) 正确的方 ...
- 多属性决策的权重确定方法及matlab 程序
本文介绍11种多属性决策权重确定方法及matlab 程序. 1.列和求逆归一化方法(NHM) 1 2.行和归一化方法(NRA) 1 3.和积法(ANC) 1 4.方根法(NGM) 1 5. 特征向量法 ...
- 利用多态特性,创建一个手机类Phones,定义打电话的方式call,创建三个子类,并在各自的方法中重写方法,编写程序入口main()方法,实现多种手机打电话...
|--需求说明 利用多态特性,创建一个手机类Phones,定义打电话的方式call,创建三个子类,并在各自的方法中重写方法,编写程序入口main()方法,实现两种手机打电话 |--解题思路 采用简单工 ...
- 利用多态特性,编程创建一个手机类Phones,定义打电话方法call()。创建两个子类:苹果手机类IPhone和安卓手机类APhone,并在各自类中重写方法call(),编写程序入口main()方法
利用多态特性,编程创建一个手机类Phones,定义打电话方法call().创建两个子类:苹果手机类IPhone和安卓手机类APhone,并在各自类中重写方法call(),编写程序入口main()方法, ...
最新文章
- js改变classname 或添加classname
- Codeforces Round #547 (Div. 3)
- listview 每行后面的小箭头_主卧带小衣帽装修,这几个装修方案,你喜欢哪个?...
- 在使用apt-get update 时更行列表,显示[Connecting to archive.ubuntu.com (2001:67c:1360:8001::21)]超时
- ubuntu配置×××后,配置走×××的路线
- c# 拼凑特定格式的报表打印
- 一看就懂!卡尔曼滤波通俗解释
- ERP项目实施记录09
- 【Flutter】基础组件【07】Appbar
- 基于IHttpAsyncHandler的TCP收发器
- 转:lnmp 搭建手册-黑一路人
- AndroidHttpCapture抓包工具
- 2018年技术直播PPT干货分享
- imp命令导入dmp文件问题
- 当前默认服务器维护尚未完成,更新公告 | 7月11日早8点停服维护
- eclipse新建java项目隐藏了bin文件夹,只有src文件夹,解决方法
- java修改mariadb数据_MariaDB更新数据
- 饼图大小调整_PPT制作简约饼图,学会这一个就够了!
- Android 框架学习2:源码分析 EventBus 3.0 如何实现事件总线
- VMtools的安装教程
热门文章
- Flutter AppBar控件
- 关系分析可视化插件-Cytoscape
- javaScript五种继承方式
- C# 删除DataTable中的空行
- php-rabbitmq结合rabbitmq_delayed_message_exchange实现延时队列
- matlab条形图颜色矩阵,Matlab条形图 – 根据符号和大小填充不同颜色的条形图
- uos/deepin设置屏幕缩放比例的命令
- 代码整合错了,回滚后再整合,为何要诉苦
- No matching configuration of project :libusb was found.
- configure: error: no usable zlib; please install zlib devel package or equivalent m