OSGI框架中通过BundleContext对象对服务的注册与引用
BundleActivator
- 在每个Bundle新建时都会默认生成Activator类,该类实现了BundleActivator类,实现了其start()和stop()两个方法
BundleContext
- 框架运行时,容器中存有唯一的BundleContext对象,与Spring容器中唯一的ApplicationContext对象同理,再后期随笔中对框架通过引入Spring DM对服务进行管理后,会对两者的关系进行进一步的讲解,在此则只对使用到BundleContext中所提供的registerService方法进行注册服务、getServiceReference方法获取服务引用及getService获取最终指向的服务对象,三个方法的调用进行叙述:
registerService
public void start(BundleContext bundleContext) throws Exception {
Activator.context = bundleContext;
IHelloService service = new CnHelloServiceImpl();
System.out.println(bundleContext.getBundle().getLocation());
System.out.println(bundleContext.getBundle().getBundleId());
System.out.println(bundleContext.getBundle().getSymbolicName());
context.registerService(IHelloService.class, service, null);
}第一个参数:注册服务的类型
第二个参数:服务所指向的对象
第三个参数:属于配置参数,如配置相同类型的服务的排序
getServiceReference与getService配合
ServiceReference<IHelloService> serviceReference = context.getServiceReference(IHelloService.class);
if(null!=serviceReference){
IHelloService service = context.getService(serviceReference);
if(null!=service){
System.out.println(service.sayHello("1111"));
System.out.println(context.getBundle().getSymbolicName());
}
context.ungetService(serviceReference);
}else{
System.out.println(context.getBundle().getSymbolicName()+":无法获取服务。");
}通过context.getServiceReference(IHelloService.class)获取到容器中服务类型为IHelloService的服务引用,如果用多个同一类型的服务,则默认获取排序最前的一个,但在正常开发中,是很少会出现发布同一类型的多个服务,然后再调用context.getService(serviceReference)方法获取到服务引用中的最终指向服务的对象,也就是在注册服务时,通过new关键字创建的对象,到此就已经可以达到服务注册与服务引用的功能实现,把它想象成Spring,其实这跟Spring对Bean的定义与注入,所达到的功能如同一辙,只是底层的实现方式不同而已。
下一篇随笔将对通过Spring DM如何对服务对象的管理与注入
OSGI框架中通过BundleContext对象对服务的注册与引用的更多相关文章
- (转载)OC学习篇之---Foundation框架中的NSString对象和NSMutableString对象
在之前的一篇文章中我们说到了Foundation框架中的NSObject对象,那么今天在在来继续看一下Foundation框架中的常用对象:NSString和NSMutableString. 在OC中 ...
- (转载)OC学习篇之---Foundation框架中的NSObject对象
前一篇文章讲到了OC中的代理模式,而且前几篇文章就介绍了OC中的类相关知识,从这篇文章开始我们开始介绍Foundation框架. OC中的Foundation框架是系统提供了,他就相当于是系统的一套a ...
- Foundation框架中的NSNumber对象详解
到目前为止,我们所讨论过的所有数字数据类型,如int型.float型和long型都是Objective-C语言中的基本数据类型,也就是说,它们都不是对象.例如,不能向它们发送消息.然而,有时需要作为对 ...
- OC学习篇之---Foundation框架中的NSString对象和NSMutableString对象
今天在在来继续看一下Foundation框架中的常用对象:NSString和NSMutableString 在OC中NSString对象是不可变的,和Java中的String一样的,而NSMutabl ...
- OC学习篇之---Foundation框架中的NSObject对象
从这篇文章开始我们开始介绍Foundation框架. OC中的Foundation框架是系统提供了,他就相当于是系统的一套api,和Java中的一些系统jar很相似,又早起的一批人开发的,内部有很多现 ...
- javascript获取iframe框架中页面document对象,获取子页面里面的内容,iframe获取父页面的元素,
javascript获取iframe框架中,加载的页面document对象 因为浏览器安全限制,对跨域访问的页面,其document对象无法读取.设置属性 function getDocument(i ...
- springmvc框架中的核心对象DispatcherServlet
SpringMVC是Spring中的模块,它实现了mvc设计模式,首先用户发起请求,请求到达SpringMVC的前端控制器(DispatcherServlet),前端控制器根据用户的url请求处理器映 ...
- go微服务框架go-micro深度学习(三) Registry服务的注册和发现
服务的注册与发现是微服务必不可少的功能,这样系统才能有更高的性能,更高的可用性.go-micro框架的服务发现有自己能用的接口Registry.只要实现这个接口就可以定制自己的服务注册和发现. go- ...
- 想要将我们的OSGi框架中的批量日志单独打印到文件中
我们的日志虽然没有直接依赖logback,但遗憾的是也没有使用slf4j,而是使用了Apache Common-Logging slf4j 和 common-logging有什么区别呢 common- ...
随机推荐
- <Natural Language Processing with Python>学习笔记一
Spoken input (top left) is analyzed, words are recognized, sentences are parsed and interpreted in c ...
- TimeDelta.total_seconds() in Python2.6-
Python 的日期操作真是无力吐槽. 如果在做日期相加减时使用TimeDelta对象,2.7及以后的TimeDelta有total_seconds()方法获取总秒数,而2.6之前没有该方法,且众所周 ...
- iOS获取设备唯一标识的各种方法?IDFA、IDFV、UDID分别是什么含义?
一.UDID (Unique Device Identifier) UDID的全称是Unique Device Identifier,顾名思义,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和 ...
- JQuery Easy Ui dataGrid 数据表格 -->转
转至: http://www.cnblogs.com/cnjava/archive/2013/01/21/2869876.html#events 数据表格 - DataGrid 内容 概况 使用方法 ...
- IOS开发中如何给UIImageView添加点击事件
1.先创建一个UIImageView控件: photeImageView = [[UIImageView alloc]init]; photeImageView.frame = CGRectMake( ...
- CodeForces 755C PolandBall and Forest (并查集)
题意:给定每一点离他最远的点,问是这个森林里有多少棵树. 析:并查集,最后统计不同根结点的数目即可. 代码如下: #pragma comment(linker, "/STACK:102400 ...
- iOS 之 深复制、浅复制
深复制不仅复制对象本身,对象持有的属性对象也做了复制. 浅复制之复制对象本身,不对里面的属性进行复制.
- 一点养老APP模式定制系统平台源码
一点养老APP模式定制系统开发:136.1013.1824电/微:搭建一点养老APP模式定制系统平台.专注于为企业和商家客户提供基于腾讯微信公众平台系统程序和APP等开发服务,中国养老金融50人论坛2 ...
- axure8.0注册码
激活码:(亲测可用) 用户名:aaa 注册码:2GQrt5XHYY7SBK/4b22Gm4Dh8alaR0/0k3gEN5h7FkVPIn8oG3uphlOeytIajxGU 用户名:axureuse ...
- swift中标签的使用
1,标签的创建 1 2 3 4 5 6 7 8 9 10 import UIKit class ViewController: UIViewController { override func ...