首页 > 高级民工 > Java动态加载jar包到运行环境

Java动态加载jar包到运行环境

2012年6月5日 发表评论 阅读评论

  在为一个正在运行的系统添加新功能或在软件主体不升级的情况下添加新功能往往是通过插件的方式实现,而插件模式设计上无非就是实现一个统一的接口然后由系统加载调用相应的方法达到插件的安装和卸载。典型的例子就如wordpress中的插件。在Java中特别是J2EE应用中插件开发好后一般都是打包成jar上传到服务器然后安装。那么如何实现把jar加载到运行时中呢?

  其实比较简单使用URLClassLoader即可,一个简单的例子:

File file = new File("c:/x.jar");//java
URL uri = file.toURI().toURL();
System.out.println(uri);
URLClassLoader load = new URLClassLoader(new URL[]{uri});

此时x.jar里的所有class都将被加载到运行环境中,如果要实例化某个类那么只需要使用load.loadClass()方法得到Class再newInstance().

在设计插件包结构时可能还需要一个描述文件,这个描述文件中定义了插件信息包括:插件名称,插件依赖,插件入口类(这个是最主要的);插件入口类就是插件接口的一个实现,在把插件的jar加载到系统中后就可以根据插件描述信息来启动插件。

另外由于ClassLoader存在访问隔离,简单来说就是用上面例子中的代码加载两个jar到系统中那么两个jar中的类是不能相互访问的。因为他们是平级的不存在父子关系。这样在需求上如果存在一个插件依赖另一个插件中的类的情况就不能达到目的。这里访问权限的问题我将在下一篇文章中介绍一种解决方案。

分类: 高级民工 标签:
  1. 本文目前尚无任何评论.

点击刷新