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- ...
随机推荐
- Android实时监听网络状态
Android实时监听网络状态(1) 其实手机在网络方面的的监听也比较重要,有时候我们必须实时监控这个程序的实时网络状态,android在网络断开与连接的时候都会发出广播,我们通过接收系统的广播就 ...
- iOS强制切换横屏、竖屏
切换横竖屏最直接的方式是调用device的setOrientation方法.但是从sdk3.0以后,这个方法转为似有API,如果要上AppStore的话,要慎用! if ([[UIDevice cur ...
- ubuntu12.04+fuerte 下跑通lsd-slam——使用usb摄像头
上一篇介绍了如何使用数据集跑lsd-slam,这篇介绍如何用一个普通的usb摄像头跑lsd-slam,默认ubuntu12.04,fuerte已经安装好,workspace也已设置,如果没有,请参考上 ...
- STM32 USB 问题汇总(转)
源:STM32 USB 问题汇总 汇总1:STM32的USB例程修改步骤,来自http://blog.csdn.net/cy757/archive/2010/01/01/5117610.aspx 以下 ...
- uboot移植前奏
Tiny4412开发板硬件版本为: 底板: Tiny4412/Super4412SDK 1506 核心板:Tiny4412 - 1412 1.下载u-boot源代码,建立u ...
- TCP/IP详解--拥塞控制 & 慢启动 快恢复 拥塞避免
TCP的拥塞控制 1. 拥塞:即对资源的需求超过了可用的资源.若网络中许多资源同时供应不足,网络的性能就要明显变坏,整个网络的吞吐量随之负荷的增大而下降. 拥塞控制:防止过多的数据注入到网络中,这样 ...
- UVa 481 - What Goes Up
题目大意:给你一系列数,找出它的最长(严格)递增子序列. 由于数据量较大,使用O(n2)的LIS算法会超时,要使用O(nlogn)的LIS算法,这里有详细的介绍. #include <cstdi ...
- Round Numbers(poj 3252)
题意:算出区间内二进制中0的个数大于等于1的个数的数字有多少个 /* 本来以为用数位DP搞,但是组合数更简单. 我们设n的二进制长度为len. ①:先考虑长度小于len的数字. 这里以数字22为例,二 ...
- Javascript 查找元素
DOM定义了多种查找元素的方法,除了我们常用的getElementById(),还有getElementsByTagName()和getElementsByName().使用这几种方法方法我们可以查找 ...
- 解開32位元Win 7記憶體4GB限制
解開32位元Win 7記憶體4GB限制: ReadyFor4GB 檔案下載:ReadyFor4GB https://sites.google.com/a/joytown.tw/bai-jia-zhi/ ...