快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
lary-resource> log4j-1.2.12.jar </ancillary-resource> <ancillary-resource> concurrent-1.3.4.jar </ancillary-resource> </ancillary-resources> </component>

为了确保框架仅从指定位置加载类,你必须创建一个新的扩展URLClassLoader的ClassLoader。重载loadClass方法以防止到它的调用传播到默认的类装载器的父级-并因此从标准classpath中加载类。这样以来,就可以把类搜索限定到提供给类装载器的URL并且让你把特定jar文件位置提供给装载组件的类装载器。

下列代码展示了组件的类装载机制:

package com.jeffhanson.components; import java.net.URL; import java.net.URLClassLoader; public class RestrictedURLClassLoader extends URLClassLoader {   public RestrictedURLClassLoader( URL[] urls) { super(urls, null);) }

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

图2.组件容器框架类关系:该图展示了存在于组件容器框架中的类之间的关系。

public Class loadClass(String name) throws ClassNotFoundException {   Class cls = super.loadClass(name);   if (cls == null)   {    throw new ClassNotFoundException("Restricted ClassLoader" + " is unable to find class: " + name);   }   return cls; } }

这个受限制的类装载器由组件容器使用来装载组件和任何指定的辅助类。

该组件容器使用当前线程的上下文类装载器来查找该组件的URL。然后,这个URL被加入到受限制的类装载器并且用于实例化该组件。然后,该组件类被组件容器缓冲以便于后面的调用。列表1展示了该组件容器的代码,图2展示了在组件容器框架中的类之间的关系。

七、装载特定类版本

现在,你可以使用该容器和受限制的类装载器来从指定档案中装载包含版本信息的类的组件。

列表2展示了如何实例化组件容器的实例并且使用配置文件名初始化它们-针对两种版本的HelloWorld组件。然后,每个组件版本被装载和实例化-使用ComponentContainer类的createComponent方法。

对于每一个实例化的组件对象的调用将产生每个组件的期望版本相应的结果。

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

图3.组件序列图:该图展示了组件容器框架创建一个组件的序列。

图3中的序列图展示了框架用于装载和创建一个组件的步骤。

注意,在实例化一个默认类装载器之前,对于RestrictedURLClassLoader类的调用终止,从而把类搜索限制为提供给RestrictedURLClassLoader实例的URL。

八、小结

总之,你已经从本文中看到了怎样构建一个类装载组件容器框架。这样以来,便利了在一个自包含上下文中定义、版本化和创建Java组件。以这种方式来利用Java的类装载能力可以把类装载约束到指定位置,从而让你同时装载不同版本的类-在同一个运行JVM中创建的和使用的类。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号