快速业务通道

在Java中用类装载框架控制类加载 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
使用的类的正确版本。为此,你可以创建一个类加载器,组件容器模型并且使用一些简单的类加载技术。

在Java中用类装载框架控制类加载(2)

时间:2011-01-02 天极 朱先忠

四、档案与组件

因为档案文件(jar文件,zip文件,等等)与Java类加载机制和发布工具之间具有相当松的耦合性,所以它们是一种用作自定义组件容器的自然的候选。一个Java组件在一个档案文件中的打包与发布的成功依赖于:

· 能够指定要实例化一个组件的哪个版本的开发者

· 装载组件的辅助类的正确版本-根据与该组件在同一个jar文件中发现的信息。

这使得组件的开发者和消费者能够完全控制实际创建和使用每一个组件的相应版本。

在下面的几节中,我将讨论一下有关于定义组件和组件命名空间的概念。

五、共享辅助资源

最大的问题之一是,当使用标准类加载器在Java中处理共享库时,所有的类都被加载到一个命名空间中。这使得在任何给定时刻很难使用相同库的不同版本。你所需要的是,一个组件能够定义它自己的命名空间-该组件及其所有辅助库将会装载到其中的。

因为在Java中,一个类的运行时刻标识是使用类的完全限定名和其加载器的ID来定义的,所以一个命名空间已经相应于每一个类加载器存在。因此,你可以使用类加载器来构建一个组件容器,由它来定义一个组件及其依赖对象的一个命名空间。

例如,如果我有一个命名为"com.jeffhanson.components.HelloWorld"的类,我想运行它的两个版本,那么解决方案是,使用一个类装载器创建HelloWorld类的一个版本的一个实例,而使用另一个类装载器创建另一个版本的HelloWorld类。图1展示了这一概念。

在Java中用类装载框架控制类加载 - 编程入门网

图1.使用多个类装载器:由于Java命名惯例特征的影响,使用不同的类装载器将定义不同的命名空间。

正如我将在本文中所要展示的,使用两个不同的类装载器来实例化一个类的技术实际上创建了一个虚拟的命名空间。然而,我实际上刚好创建了同一个版本的类的多个实例。

为了便于加载和实例化同一个类的多个版本,我将展示(在下面的几节中)一个组件-容器框架-它基于类装载器命名空间机制以允许装载同一个类的不同版本。

六、利用Classloader命名空间

你可以把组件容器框架实现为一个容器实体-负责加载在jar或zip档案中定义的组件以及该组件需要的辅助类。这个框架的创建目标是:

1. 允许开发者指定实例化一个组件的哪个版本。

2. 基于与组件在同一个jar文件中找到的信息为每个组件装载正确的辅助类。

3. 跨组件共享辅助类和档案。

你将需要一个配置文件来定义组件及其相应的辅助文件,正如下列示例所展示的:

<?xml version="1.0"?>   <component name="com.jeffhanson.components.HelloWorld">    <component-archive>     HelloWorldComponentV1.jar    </component-archive>    <ancillary-resources>    <ancillary-resource>     log4j-1.2.12.jar    </ancillary-resource>    <ancillary-resource>     concurrent-1.3.4.jar    </ancillary-resource>    </ancillary-resources> </component>

在Java中用类装载框架控制类加载(3)

时间:2011-01-02 天极 朱先忠

你可以把上面例子中的元素与下面例子中的元素进行比较。唯一的改变是组件档案元素的值。这个组件元素值定义了包含每一个版本组件的档案的名字。

<?xml version="1.0"?> <component name= "com.jeffhanson.components.HelloWorld"> <component-archive> HelloWorldComponentV2.jar </component-archive> <ancillary-resources> <ancil

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号