• 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对象对服务的注册与引用的更多相关文章

  1. (转载)OC学习篇之---Foundation框架中的NSString对象和NSMutableString对象

    在之前的一篇文章中我们说到了Foundation框架中的NSObject对象,那么今天在在来继续看一下Foundation框架中的常用对象:NSString和NSMutableString. 在OC中 ...

  2. (转载)OC学习篇之---Foundation框架中的NSObject对象

    前一篇文章讲到了OC中的代理模式,而且前几篇文章就介绍了OC中的类相关知识,从这篇文章开始我们开始介绍Foundation框架. OC中的Foundation框架是系统提供了,他就相当于是系统的一套a ...

  3. Foundation框架中的NSNumber对象详解

    到目前为止,我们所讨论过的所有数字数据类型,如int型.float型和long型都是Objective-C语言中的基本数据类型,也就是说,它们都不是对象.例如,不能向它们发送消息.然而,有时需要作为对 ...

  4. OC学习篇之---Foundation框架中的NSString对象和NSMutableString对象

    今天在在来继续看一下Foundation框架中的常用对象:NSString和NSMutableString 在OC中NSString对象是不可变的,和Java中的String一样的,而NSMutabl ...

  5. OC学习篇之---Foundation框架中的NSObject对象

    从这篇文章开始我们开始介绍Foundation框架. OC中的Foundation框架是系统提供了,他就相当于是系统的一套api,和Java中的一些系统jar很相似,又早起的一批人开发的,内部有很多现 ...

  6. javascript获取iframe框架中页面document对象,获取子页面里面的内容,iframe获取父页面的元素,

    javascript获取iframe框架中,加载的页面document对象 因为浏览器安全限制,对跨域访问的页面,其document对象无法读取.设置属性 function getDocument(i ...

  7. springmvc框架中的核心对象DispatcherServlet

    SpringMVC是Spring中的模块,它实现了mvc设计模式,首先用户发起请求,请求到达SpringMVC的前端控制器(DispatcherServlet),前端控制器根据用户的url请求处理器映 ...

  8. go微服务框架go-micro深度学习(三) Registry服务的注册和发现

    服务的注册与发现是微服务必不可少的功能,这样系统才能有更高的性能,更高的可用性.go-micro框架的服务发现有自己能用的接口Registry.只要实现这个接口就可以定制自己的服务注册和发现. go- ...

  9. 想要将我们的OSGi框架中的批量日志单独打印到文件中

    我们的日志虽然没有直接依赖logback,但遗憾的是也没有使用slf4j,而是使用了Apache Common-Logging slf4j 和 common-logging有什么区别呢 common- ...

随机推荐

  1. 在Windows环境下设置terminal下调试adb

    当我们想要查看某些程序运行的结果的时候.可能需要打开adb,输入相应的命令,在Windows环境下,需要配置环境变量. 当我们直接在Windows环境下输入adb shell,会提示adb是不内部命令 ...

  2. linux命令学习-4-lsof

    lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件. 在终端下输入ls ...

  3. mac 画图

    1.1.XMind 基础功能免费试用 1.2.OmniGraflle 可以跳转之类的,比较方便的,类似于可以制作原型图 Omnigraffle Pro 6 Name: mojadoSerial: JY ...

  4. python with用法

    python中with可以明显改进代码友好度,比如: with open('a.txt') as f: print f.readlines() 为了我们自己的类也可以使用with, 只要给这个类增加两 ...

  5. 四 APPIUM GUI讲解(Windows版)

    Windows版本的APPIUM GUI有以下图标或者按钮: ·Android Settings  - Android设置按钮,所有和安卓设置的参数都在这个里面 ·General Settings – ...

  6. GoLang(第一篇 安装)

    golang官网:https://golang.org 中文文档:docscn.studygolang.com/doc/ 一:环境变量设置 导入环境变量GOROOT:export GOROOT=/us ...

  7. codeforces 755D. PolandBall and Polygon

    D. PolandBall and Polygon time limit per test 4 seconds memory limit per test 256 megabytes input st ...

  8. CSS3动画效果——js调用css动画属性并回调处理详解

    http://www.jb51.net/css/258407.html 这篇文章主要详细介绍了CSS3动画效果回调处理,需要的朋友可以参考下 我们在做js动画的时候,很多时候都需要做回调处理,如在一个 ...

  9. Jqgrid学习(转载)

    jqGrid API 全   JQGrid是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信. JQGrid Demo 是一个在线的演示项目.在这里,可以知道jqgrid可以做 ...

  10. Java经典案例之-“成绩等级划分”

    /** * 描述:在对话框中输入学习成绩,利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示, * 60分以下的用C表示. * 分析:可以利用三目运算符 ...