`

Tuscany SCA Core实现的SPI机制

    博客分类:
  • SOA
阅读更多
参考:http://kevinkevin1979.iteye.com/blog/837715
   SPI的全名为Service Provider Interface.普通开发人员可能不熟悉,因为这个是针对厂商或者插件的。在java.util.ServiceLoader的文档里有比较详细的介绍。究其思想,其实是和"Callback"差不多。“Callback”的思想是在我们调用API的时候,我们可以自己写一段逻辑代码,传入到API里面,API内部在合适的时候会调用它,从而实现某种程度的“定制”。
   典型的是Collections.sort(List<T> list,Comparator<? super T> c)这个方法,它的第二个参数是一个实现Comparator接口的实例。我们可以根据自己的排序规则写一个类,实现此接口,传入此方法,那么这个方法就会根据我们的规则对list进行排序。
   把这个思想扩展开来,我们用SPI来重新实现上面的例子。客户把自己的排序规则写成一个类,并且打包归档成Jar文件,这个Jar文件里面必须有META-INF目录,其下又有services目录,其下有一个文本文件,文件名即为接口的全名:java.util.Comparator。
--META-INF
  --services
    --java.util.Comparator

  文件内容只有一行:
  com.ruijie.ComparatorProvider

  这一行是你实现了Comparator接口的类的全名,它的代码如下:
 
  package com.ruijie; 
  import java.util.Comparator; 
  import com.mycompany.myapp.MyItem; 
  public class ComparatorProvider implements Comparator<MyItem>{ 

  @Override 
  public int compare(MyItem o1, MyItem o2) { 
                //依据name排序  
   return o1.getName().compareTo(o2.getName()); 
  } 

  } 
  


  编译打包后,把它放到你的主程序的class path里。下面是你的主程序:
 
  //从class path中所有Jar的META-INF目录中搜索,找到合适的类并加载。 
  private static ServiceLoader<Comparator> serviceLoader 
    = ServiceLoader.load(Comparator.class); 

  public static void main(String[] args) 
  { 
      List<MyItem> myList = new ArrayList<MyItem>(); 
      myList.add(new MyItem(2,"c","hhh")); 
      myList.add(new MyItem(3,"k","ooo")); 
      myList.add(new MyItem(4,"d","ppp")); 
      myList.add(new MyItem(5,"b","ggg")); 

      showList(myList); 

      Collections.sort(myList,getCompartor()); 

      showList(myList); 
  } 

   @SuppressWarnings("unchecked") 
   private static Comparator<MyItem> getCompartor() { 

   for(Comparator service : serviceLoader) 
   { 
       return (Comparator<MyItem>)service; 
   } 
       
   return null; 
} 

  


   要注意的是serviceLoader开始只是加载类,实例化要到第一次用的时候。类MyItem和方法showList并不重要,所以你不必在意。你可以按照这个规则,写另外一个排序规则的Jar,随时可以更换你的排序规则.
分享到:
评论

相关推荐

    基于Tuscany SCA的分布式SCA应用的设计与实现.pdf

    Tuscany SCA(Service Component Architecture)是由Apache软件基金会所提供的一个开源框架,用于实现服务组件架构。它支持SCA规范,能够简化服务的部署、管理和交互。Tuscany SCA框架可以帮助开发者快速构建和部署...

    Tuscany SCA in Action

    《Tuscany SCA在行动》一书深入探讨了Service Component Architecture(SCA)与Apache Tuscany项目,这是IT领域内对服务组件架构及其实现的重要研究资料。以下是基于标题、描述、部分目录和标签生成的相关IT知识点:...

    Tuscany SCA与Spring、Hibernate整合实例-简洁方法

    在这个实例中,我们将探讨如何将Tuscany SCA与两大主流框架——**Spring**和**Hibernate**进行整合,以实现更加简洁高效的应用开发。 **Spring框架**是Java领域最知名的依赖注入(DI)和面向切面编程(AOP)框架之...

    apache-tuscany-sca-1.6.2

    通过深入研究这些源码,开发者可以学习到如何定义、实现、部署和管理SCA组件,理解服务之间的交互方式,以及如何利用Tuscany的API和工具提高开发效率。这将有助于提升开发者在分布式系统设计和实现方面的专业技能。

    Apache tuscany SCA实例

    Apache Tuscany是Apache软件基金会的一个开源项目,它实现了Service Component Architecture(SCA,服务组件架构),这是一种用于构建和集成分布式应用程序的规范。这个实例可能是关于如何使用Apache Tuscany来开发...

    Apache Tuscany SCA 用户指南StepByStep

    Apache Tuscany SCA(Service Component Architecture)是Apache软件基金会开发的一个开源项目,它提供了一个用于构建、部署和管理服务的框架。SCA是一种服务导向架构(SOA)标准,旨在简化不同技术间的互操作性,使...

    apache-tuscany-sca-1.6.zip

    Apache Tuscany SCA(Service Component Architecture)是一个开源项目,由Apache软件基金会维护,它提供了一个框架和中间件,用于构建、部署和管理分布式应用程序。SCA是一种标准,旨在简化服务导向架构(SOA)的...

    一种基于Tuscany SCA的分布式应用模型.pdf

    在Tuscany SCA中,组件可以是Java接口及其实现类、EJB(Enterprise JavaBeans)、BPEL(Business Process Execution Language)等不同形式。组件通常需要与其他组件交互,如调用它们提供的服务或使用它们的数据。 ...

    How does ServiceMix compare to Tuscany or SCA

    SCA提供了一种抽象层,允许开发者避免直接处理底层基础设施的复杂性,而Tuscany作为SCA的实现,为开发者提供了实践这一理念的具体工具。 EJB(Enterprise JavaBeans)曾是Java企业应用开发的标准,但其复杂性和严格...

    Apach Tuscany SCA

    Apache Tuscany是Apache软件基金会开发的一个开源项目,其核心目标是实现Service Component Architecture(SCA,服务组件架构)规范,这是一种用于构建Service-Oriented Architecture(SOA,面向服务架构)的应用...

    sca.rar_SCA_tuscany

    **Apache Tuscany Service Component Architecture (SCA) 概述** Apache Tuscany是一个开源的服务组件架构(Service Component Architecture,简称SCA),它提供了一种用于构建和部署分布式应用程序和服务的标准化...

    tuscany发布webservice实例

    Tuscany项目是一个开放源码的SOA(Service-Oriented Architecture,面向服务架构)实现,由Apache软件基金会维护。它提供了一个灵活、可扩展的框架来构建和部署分布式服务。在这个“Tuscany发布Web服务实例”中,...

    SOA之SCA导航-Apache Tuscany篇

    Apache Tuscany是Apache软件基金会开发的一个开源实现SCA的项目,它提供了一个全面的SOA平台,用于构建、部署和管理分布式应用程序。 **1. 使用命令行构建计算器应用** 在Apache Tuscany中,构建计算器应用通常...

    TuscanySCAinActionPDFBooks.pdf 英文原版

    Tuscany SCA in Action – PDF Books

    Tuscany In Action书

    Tuscany SCA支持使用多种编程语言实现SCA组件,包括但不限于Java、C#、Python等。这使得开发者可以根据项目需求选择最适合的语言进行开发,提高了代码的重用性和系统的灵活性。 #### 绑定机制的运用 绑定机制用于...

Global site tag (gtag.js) - Google Analytics