Java编程的动态性,第5部分: 动态转换类 - 编程入门网
java test.Test arg1 arg2 arg3 您相应地要通过如下命令使用 Run 类来运行应用程序: java Run test.Test arg1 arg2 arg3 Java编程的动态性,第5部分: 动态转换类(2)时间:2011-04-09 IBM Dennis M. Sosnoski拦截类加载 就其本身而言,清单 1 中短小的 Run 类不是非常有用。为了实现拦截类加载过程的目标 ,我们需要采取进一步的动作,对应用程序类定义和使用我们自己的 classloader。 正如我们在第 1 部分中讨论的,classloader 使用一个树状层次结构。每个 classloader(JVM 用于核心 Java 类的根 classloader 除外)都具有一个父 classloader 。Classloader 应该在独自加载类之前检查它们的父 classloader,以防止当某个层次结构 中的多个 classloader 加载同一个类时可能引发的冲突。首先检查父 classloader 的过程 称为 委托――classloader 将加载类的责任委托给最接近根的 classloader,后者能够访问 要加载类的信息。 当 清单 1 中的 Run 程序开始执行时,它已经被 JVM 默认的 System classloader(您 定义的 classpath 所指定的那一个)加载了。为了符合类加载的委托规则,我们需要对相同 的父 classloader 使用完全相同的 classpath 信息和委托,从而使我们的 classloader 成 为 System classloader 的真正替代者。幸运的是,JVM 当前用于 System classloader 实 现的 java.net.URLClassLoader 类提供了一种检索 classpath 信息的容易途径,它使用了 getURLs() 方法。为了编写 classloader,我们只需从 java.net.URLClassLoader 派生子类 ,并初始化基类以使用相同的 classpath 和父 classloader 作为加载主类的 System classloader。清单 2 提供了这种方法的具体实现: 清单 2. 一个详细的 classloader
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |