模块化Java:声明式模块化 - 编程入门网
;?>
<scr:component name="shorten-tinyurl" xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0">
<implementation class="com.infoq.shorten.tinyurl.TinyURL"/>
<service>
<provide interface="com.infoq.shorten.IShorten"/>
</service>
</scr:component>
当DS处理这一组件时,其效果与代码context.registerService( com.infoq.shorten.IShorten.class.getName(), new com.infoq.shorten.tinyurl.TinyURL(), null );基本一样。Trim()服务需要类 似的声明,在下面的源代码中包含着这部分内容。 如果需要的话,一个单一组件可以基于不同接口提供多个服务。一个bundle 也可以包含多个组件,使用相同或不同的类,每个都提供不同的服务。 模块化Java:声明式模块化(2)时间:2010-11-29 infoq 译:宋玮消费服务 要消费该服务,我们需要修改ShortenCommand,这样它就绑定到IShorten服 务的一个实例上:
注意,不像上一次,这次没有对OSGi API产生依赖;mock一个实现来检验其 是否工作正常也很轻松。那个synchronized修饰符确保了在服务get/set时不会 产生竞争情况。 为了告诉DS需要把IShorten服务实例绑定到我们的EquinoxShortenCommand组 件上,我们需要定义其所需的服务。当DS实例化你 的组件时(用默认构造器) ,它将通过调用定义在bind属性里的方法(setShorten())来设置IShorten服务 。
无论bundle的启动顺序如何,一旦IShorten服务可用,该组件就将被实例化 并连接到这个服务。有关策略(policy)、基数性(cardinality)和服务 (service)的内容在下一节再做解释。 模块化Java:声明式模块化(3)时间:2010-11-29 infoq 译:宋玮策略和基数性 策略(policy)可被设为static或dynamic。static策略表示一旦设置,服务 不会变化。如果服务不可用了,组件也就失效了;如果一个新服务出现,那么就 创建一个新的实例,并将该服务重新绑定。这显然比我们就地更新服务要费劲得 多。 使用dynami |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |