OSGi 和 Declarative Services

就像笔者在 怎样创建GWT+OSGi项目 这篇文章中所提到的,在Java世界, OSGi作为一个模块化系统和服务平台一直深受大家的喜爱, 而且随着Eclipse的成功和广受好评, OSGi应用越来越广泛, 小到一个Eclipse插件开发, 大到庞大的J2EE系统。

每一个OSGi的模块对应一个相对独立的解耦合的逻辑块,作为后台(back-end)体系中的OSGi模块,每一个模块常常都要提供至少一个服务,同时使用其他模块提供的服务。如果开发人员自行编写程序来处理模块为彼此提供和使用服务的关系,会十分复杂并且容易出错。在大型的项目开发和运行中,这样自行编写的程序常常会导致在OSGi模块生命周期中过早地实例化或者说启动了一些类或者服务,从而不必要地消耗系统内存和延缓项目运行的速度。

而通过使用Declarative Service,每一个模块显式地声明一些component,用来提供以及使用服务。Component以XML的格式定义,OSGi在runtime创建component的实例。每个模块可以有多个这样的xml文件,每个xml可以包含多个component声明。

<?xml version="1.0" encoding="UTF-8"?> <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="com.csdn.services.csdn.csdnService"> <implementation class="com.csdn.services.csdn.DefaultImplementationClass"/> <reference bind="setCsdnService" cardinality="1..1" interface="com.csdn.core.model.csdn.CSDNService" name="CSDNService" policy="static" unbind="unsetCsdnService"/> </scr:component>

这个xml第三行(implementation标签)的作用是告诉OSGi的Servie Component Runtime (SCR),我这个模块中有一个DefaultImplementationClass,将要使用其他模块的服务。第四行(reference标签)的作用是为这个模块声明了对com.csdn.core.model.csdn.CSDNService服务的引用,并且向SCR宣布在DefaultImplementationClass中将使用setCsdnService和unsetCsdnService来set和unset这个服务。(为了线程安全,这个set和unset方法一般定义为public synchronized)

这些XML都需要加入到manifest文件中:

<待续>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值