`
snoopy7713
  • 浏览: 1153560 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

服务工厂 - Bundle消费者返回不同的服务对象

    博客分类:
  • OSGi
阅读更多

一般情况下,服务对象在注册后,任何其它的Bundle在请求该服务时,OSGi容器都是返回同一个对象。如果我们需要为每一个 Bundle消费者返回不同的服务对象,或者,在真正需要该服务对象时才创建。对于这些情况,我们可以创建一个实现ServiceFactory接口的 类,把该类的对象注册为服务(不是注册实际的服务对象),这样,当Bundle请求该服务时,ServiceFactory实现类将接管该请求,为每个 Bundle新建一个实际的服务对象。以下是服务工厂的使用范例源码:

 

1、服务接口及其实现类

Java代码  收藏代码
  1. public   interface  HelloService {  
  2.     public  String sayHello(String name);  
  3. }  

 

Java代码  收藏代码
  1. public   class  HelloServiceImpl  implements  HelloService {  
  2.     public  String sayHello(String name) {  
  3.         return   "Hello "  + name;  
  4.     }  
  5. }  

 

2、服务工厂类

Java代码  收藏代码
  1. public   class  HelloServiceFactory  implements  ServiceFactory {  
  2.     //当请求服务时,OSGi容器会调用该方法返回服务对象。   
  3.     //当服务对象不为null时,OSGi框架会缓存这个对象,即对于同一个消费者,将返回同一个服务对象。   
  4.     public  Object getService(Bundle bundle, ServiceRegistration serviceRegistration) {  
  5.         System.out.println("创建HelloService对象:"  + bundle.getSymbolicName());  
  6.         HelloService helloService = new  HelloServiceImpl();  
  7.         return  helloService;  
  8.     }  
  9.   
  10.     //当Bundle释放服务时,OSGi容器会调用该方法   
  11.     public   void  ungetService(Bundle bundle, ServiceRegistration serviceRegistration, Object service) {  
  12.         System.out.println("释放HelloService对象:"  + bundle.getSymbolicName());  
  13.     }  
  14. }  

 

3、Bundle激活器类

Java代码  收藏代码
  1. public   class  Activator  implements  BundleActivator {  
  2.     ServiceRegistration serviceRegistration;  
  3.       
  4.     public   void  start(BundleContext context)  throws  Exception {  
  5.         //注册服务   
  6.         HelloServiceFactory helloServiceFactory = new  HelloServiceFactory();  
  7.         serviceRegistration =  context.registerService(HelloService.class .getName(), helloServiceFactory,  null );  
  8.           
  9.         //获取服务(通过服务工厂取得)   
  10.         ServiceReference serviceReference = context.getServiceReference(HelloService.class .getName());  
  11.         HelloService selloService = (HelloService)context.getService(serviceReference);  
  12.         System.out.println("1: "  + selloService.sayHello( "cjm" ));  
  13.           
  14.         //第二次取得的服务对象与之前取得的是同一个对象   
  15.         serviceReference = context.getServiceReference(HelloService.class .getName());  
  16.         selloService = (HelloService)context.getService(serviceReference);  
  17.         System.out.println("2: "  + selloService.sayHello( "cjm" ));  
  18.     }  
  19.       
  20.     public   void  stop(BundleContext context)  throws  Exception {  
  21.         serviceRegistration.unregister();  
  22.     }  
  23. }  

 

分享到:
评论

相关推荐

    adt-bundle-windows-x86-20140624工具文件

    "adt-bundle-windows-x86-20140624工具文件"是一个专为Windows平台上的x86架构设计的Android开发工具包。这个压缩包包含了Android开发者需要的一系列核心工具,使得用户能够在本地环境中创建、调试和发布Android应用...

    adt-bundle-windows-x86-20140624

    "adt-bundle-windows-x86-20140624" 是一个专为Windows平台32位架构设计的Android开发工具包。这个压缩包是Google为了方便开发者进行Android应用开发而提供的集成环境,包含了所有必要的工具和软件,使得开发者能够...

    swiper-bundle.min_swiper-bundle.min_swiper-bundle_Modified_jquer

    标题中的"swiper-bundle.min"指的是Swiper.js的压缩版库,这是一个流行的触摸滑动插件,常用于创建轮播图、幻灯片和其他需要滚动效果的网页元素。"swiper-bundle"通常包含了所有必要的模块,使得开发者无需额外引入...

    adt-bundle-windows-x86_64-20140624

    "adt-bundle-windows-x86_64-20140624" 是一个专为Windows 64位系统设计的Android开发工具包,它包含了开发Android应用所需的所有基本组件,是Android开发者的重要工具。这个版本发布于2014年6月24日,为当时的...

    adt-bundle-windows-x64

    adt-bundle-windows-x64 下载速度很快 adt-bundle-windows-x64

    nexus-2.12.0-01-bundle

    nexus-2.12.0-01-bundle

    adt-bundle-windows-x86_64-中文包

    下面俩个版本都能正常使用: 编译器版本号:adt-bundle-windows-x86_64-20130717 编译器版本号:adt-bundle-windows-x86_64-20130917 汉化方法: 拷贝中文包中的文件到编译器同名目录下

    postgis-bundle-pg15x64-setup-3.3.2-2.exe

    postgis-bundle-pg15x64-setup-3.3.2-2.exe是一个安装程序,用于在64位操作系统上安装PostGIS和PostgreSQL扩展。PostGIS是一个开源的空间数据库扩展,它允许用户在PostgreSQL数据库中存储和查询地理空间数据。该扩展...

    adt-bundle-windows-x86_64_20140101.zip下载

    adt-bundle-windows-x86_64_20140101.zip下载,百度云盘分享链接下载

    gatling-charts-highcharts-bundle-3.3.1-bundle.zip

    标题中的"gatling-charts-highcharts-bundle-3.3.1-bundle.zip"表明这是一个包含Gatling-Charts-Highcharts-Bundle 3.3.1版本的压缩包文件。这个版本可能包含了该工具的所有组件,包括Gatling的执行引擎、Highcharts...

    sqlite-netFx46-setup-bundle SQlLite驱动下载

    2. sqlite-netFx46-setup-bundle-x86-2015-1.0.98.0.exe:这是一个32位版本的SQLite安装包,适用于32位操作系统的.NET Framework 4.6环境,同样版本号为1.0.98.0,发布于2015年。 使用这两个安装程序,开发者可以...

    hudi-hadoop-mr-bundle-0.11.0.jar

    hudi-hadoop-mr-bundle-0.11.0.jar 配合文档

    sqlite-netFx40-setup-bundle-x86-2010-1.0.113.0.exe

    sqlite-netFx40-setup-bundle-x86-2010-1.0.113.0.exe

    nexus-2.14.8-01-bundle.zip

    2. 配置仓库:在Web界面中,可以创建不同类型的仓库,如代理仓库、集团仓库和宿主仓库。代理仓库用于缓存和分发远程Maven仓库的依赖,宿主仓库则用于存放团队内部的jar包。 3. 发布自定义jar包:将团队的构建产物...

    adt-bundle-windows-x86_64-20140101

    adt-bundle-windows-x86_64-20140101 全 共 1.6G安卓开发工具

    nexus-2.12.0-01-bundle1111

    nexus-2.12.0-01-bundle

    swiper-bundle.min.js

    swiper-bundle.min.js

    gatling-charts-highcharts-bundle-2.3.1-bundle.zip

    Gatling主要用于测量基于HTTP的服务器,比如Web应用程序,RESTful服务等。 1 优点: 1.gatling和其他压力工具相比有个好处是放在同一内网环境下linux服务器上,这样避免其他压力使用办公机使用共有网络,网络情况对...

    VMware-Horizon-Extras-Bundle-5.1.0-13920927.zip

    总的来说,VMware-Horizon-Extras-Bundle-5.1.0-13920927.zip提供了全面的工具集,帮助IT管理员优化和管理VMware Horizon环境,确保用户获得稳定、高效的远程桌面体验。通过调整这些admx文件中的策略,管理员可以...

    mysql-8.0.28-1.el7.x86-64.rpm-bundle.tar

    解压这个`.tar`文件后,用户将得到一系列`.rpm`文件,这些文件分别对应MySQL的不同组件,如服务器、客户端工具、开发库等。例如,`mysql-community-server`包含数据库服务器,`mysql-community-client`包含用于与...

Global site tag (gtag.js) - Google Analytics