Java中的SPI(Service Provider Interface)介绍及示例

转载 2013年12月03日 17:32:43
一个服务(service)通常指的是已知的接口或者抽象类,服务提供方就是对这个接口或者抽象类的实现,然后按spi标准存放到资源路径META-INF/services目录下,文件的命名为该服务接口的全限定名。如有一个服务接口com.test.Service,其服务实现类为com.test.ChildService,那此时需要在META-INF/services中放置文件com.test.Service,其中的内容就为该实现类的全限定名com.test.ChildService,有多个服务实现,每一行写一个服务实现,#后面的内容为注释,并且该文件只能够是以UTF-8编码。
    这种实现方式,感觉和我们通常的开发方式差不多,都是定义一个接口,然后子类实现父类中定义的方法,为什么要搞这么一套标准以及单独搞一个配置文件?这种方式主要是针对不同的服务提供厂商,对不同场景的提供不同的解决方案制定的一套标准,举个简单的例子,如现在的JDK中有支持音乐播放,假设只支持mp3的播放,有些厂商想在这个基础之上支持mp4的播放,有的想支持mp5,而这些厂商都是第三方厂商,如果没有提供SPI这种实现标准,那就只有修改JAVA的源代码了,那这个弊端也是显而易见的,也就是不能够随着JDK的升级而升级现在的应用了,而有了SPI标准,SUN公司只需要提供一个播放接口,在实现播放的功能上通过ServiceLoad的方式加载服务,那么第三方只需要实现这个播放接口,再按SPI标准进行打包成jar,再放到classpath下面就OK了,没有一点代码的侵入性。

Java的SPI机制与简单的示例

一、SPI机制 这里先说下SPI的一个概念,SPI英文为Service Provider Interface单从字面可以理解为Service提供者接口,正如从SPI的名字去理解SPI就是Serv...
  • z69183787
  • z69183787
  • 2016年11月01日 18:05
  • 939

spring揭秘(三)——掌管大局的IoC Service Provider

IoC Service Provider
  • wangmaohong0717
  • wangmaohong0717
  • 2016年11月28日 21:11
  • 278

【Java实战】源码解析Java SPI(Service Provider Interface )机制原理

一、背景知识http://www.oracle.com/technetwork/articles/javase/extensible-137159.html
  • honghailiang888
  • honghailiang888
  • 2017年05月24日 14:44
  • 761

服务提供者框架(Service Provider FrameWork)——jdbc连接

服务提供者框架组建: Service Interface  具体的业务逻辑实现 的协议,各大业内厂商根据自己的业务逻辑实现。Service Provider Interface "负责创建其服务...
  • lemon89
  • lemon89
  • 2015年04月18日 12:42
  • 836

Guice 学习(六)使用Provider注入服务( Provider Inject Service)

1、定义接口package com.guice.providerInject;import com.google.inject.ProvidedBy;public interface Service ...
  • u010834071
  • u010834071
  • 2015年07月01日 11:09
  • 2110

dubbo spi原理解析

dubbo基于spi的思想实现了可扩展式的插件编程,组件的加载都是通过spi来实现 ,只有搞清的spi的原理,才能对dubbo继续深入研究 如下Protocol refprotocol = Exten...
  • u012325403
  • u012325403
  • 2017年01月20日 15:59
  • 624

Java平台扩展机制#2:Services

A service is a well-known set of interfaces and (usually abstract) classes. A service provider is a ...
  • kisimple
  • kisimple
  • 2014年07月29日 23:37
  • 1088

spring三层示例controller层,service层示例,dao层示例

Spring框架提倡面向接口编程,所以在写以下类时,最好能先写好接口,让以下的类去实现接口 1.Spring框架中controller层示例 package org.tarena.note...
  • fanlulu2015
  • fanlulu2015
  • 2015年12月17日 14:42
  • 2956

扩展点加载机制(ExtensionLoader)

概述来源: Dubbo的扩展点加载从JDK标准的SPI(Service Provider Interface)扩展点发现机制加强而来。Dubbo改进了JDK标准的SPI的以下问题: + JDK标准...
  • jdluojing
  • jdluojing
  • 2015年04月08日 21:39
  • 10447

Java的SPI机制浅析与简单示例

一、SPI机制         这里先说下SPI的一个概念,SPI英文为Service Provider Interface单从字面可以理解为Service提供者接口,正如从SPI的名字去理解S...
  • zmx729618
  • zmx729618
  • 2016年11月22日 14:33
  • 1863
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中的SPI(Service Provider Interface)介绍及示例
举报原因:
原因补充:

(最多只允许输入30个字)