Configuration Point in HiveMind

<script type="text/javascript"> document.location.href="http://blog.csdn.net/mindhawk/archive/2006/12/16/1445000.aspx"; </script>     配置扩展点是HiveMind的一个核心概念。当你拥有一系列服务之后,对这些服务进行配置就是很自然的了。在HiveMind里,一个配置扩展点包含了一个无序元素的集合。其中的每个元素都是定义在某个模块里,另外每个模块都可以为一个对它可见的扩展点增加定义元素(HiveMind里面把这种定义称为contribution)。
    服务扩展点(service point)和配置扩展点(configuration point)没有直接的联系,所以服务和配置同名也是很常见的(这种同名可能是有意的或无意的;服务和配置扩展点使用的是不同的命名空间)。服务和配置扩展点的联系只有在代码里面才能体现,服务关联了一个配置之后就可以随意操作它里面的所有元素。
    现在,HiveMind里的配置扩展点可以是配置的数据是一个不可修改的List或一个不可修改的Map。区别这两种模式的方法是通过指定关键属性来区别,如果指定关键属性则会使用这个属性最为主键。
    在系统启动的时候配置扩展点的数据是不会生成的,在第一次引用配置扩展点的数据(List或Map)时才会生成一个实际数据的代理。生成的代理结构和 单例模式的代理模式很像,也分为内外两层。当实际访问时内层代理会改变外层代理的内层代理属性,使其指向实际的数据。和单例模式不同的是,配置扩展点生成的代理不是动态代码生成的,而是一个已经编写好的类。不动态生成的原因可能是因为此处的代理只需要涉及List和Map两种固定的类型,不需要根据运行时的情况动态的获取类类型并为其生成代理。下图展示了代理的类结构。
configuration point
    下面以List的size方法为例,通过连续两次访问该方法解释代理如何实现延迟读取的过程。
  configuration point sequence
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值