快速业务通道

在PropertyResourceBundles中引入继承 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
onshipLoader 中用关系文件初始化父束

/**    * Initializes all parent relationships defined in the    * relationships file. Subsequent to this method call,    * the createRelationships() method can be called to set    * up the parents in the resource bundle.    */   protected void initRelationships() {     // all parent bundles defined in the relationships file.     relationships = new Vector();     // gets all parent bundle names from the file.     Enumeration e = getRelationshipNames();     while (e.hasMoreElements()) {      String curName = (String)e.nextElement();      // Gets the InheritedPropertyResourceBundle from the      // manager with parent bundle name and the locale      // and class loader used to initialize the bundle.      // Then adds it to the list of parent bundles.      relationships.add(InheritedBundleManager.getInstance().               getBundle(curName, locale, loader));     }   }   /**    * Adds relationships to the InheritedPropertyResourceBundle.    * @param source the InheritedPropertyResourceBundle.    */   protected void createRelations(InheritedPropertyResourceBundle source) {     for (Enumeration e = relationships.elements(); e.hasMoreElements();) {      InheritedPropertyResourceBundle cur =        (InheritedPropertyResourceBundle)e.nextElement();      source.addRelationship(cur);     }   }

在PropertyResourceBundles中引入继承(5)

时间:2011-02-06 Eric A. Olson

新类:InheritedBundleManager

最后一个新类是所有创建的 InheritedPropertyResourceBundle 的一个管理器类,名为 InheritedBundleManager 。 InheritedBundleManager 类是单元素 ― 在 Java 虚拟机中只有一个实例是有效的。使用这个管理器类的原因是要最大限度地减少内存中的资源束。这样考虑一下:如果另一个束每次继承父束时,都要创建一个新的父束,VM 中资源束的数量很快就会超出控制。

出于这个原因, InheritedBundleManager 类管理由 InheritedPropertyResourceBundle 创建的所有实例。每一个束名称、语言环境和类装载程序(语言环境和类装载程序作为可选参数)只允许有一个 InheritedPropertyResourceBundle 的实例。

例如,第一次用缺省语言环境和类装载程序请求 resources.ProductNames 束时,管理器会创建一个新的实例并将其放入缓冲区。当出现带有相同参数的后继请求时,缓冲的实例就会被返回。

所有的新代码都通过 InheritedBundleManager 来获取 InheritedPropertyResourceBundle 的一个实例。重要的是继承束机制的用户要做同样的事。

缺陷

这种方法并非万灵药;它的缺点包括循环继承、获取资源束引用的问题和继承了意外的类。让我们更详细地看一下其中的每一个缺陷。

循环继承

当前的实现并不检查循环继承。例如,如果定义了两个 InheritedPropertyResourceBundle ― 一个名为 resources.CompetitorProductNames ,另一个名为 resources.ProductName ― 两者都被定义为逻辑地继承另一个,解决方案就会失败。

这种检查被有意地留在了设计之外,因为它会降低性能,特别是当继承树比较大的时候。

如果清楚地定义了继承层次结构,确保没有形成循环继承的相关问题,这个问题完全可以被消除。 可以向代码添加检查语句,如果添加的父束会引起循环继承有关的问题,那么一个异常将被

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