`
flychao88
  • 浏览: 753133 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

跟我学Dubbo系列之Java SPI机制简介

 
阅读更多

SPI 简介

SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现,

通过一个简单例子来说明SPI是如何使用的。 首先通过一张图来看看,用SPI需要遵循哪些规范,因为spi毕竟是JDK的一种标准。

而后,把新加的实现,描述给JDK知道就行啦(通过改一个文本文件即可)公司内部,目前Dubbo框架就基于SPI机制提供扩展功能。

我们首先需要一个目录,META-INF\services 如下,最终的目录路径就像这样:

文件名字为 接口/抽象类: 全名 文件内容: 接口/抽象类 实现类
就像这样:com.spi.impl.TextHellocom.chaochao.spi.impl.ImageHello

实现类:

最后,来看看,如果使用SPI机制,客户端代码:

最后的输出:Text Hello.Image Hello。

dubbo的扩展机制和java的SPI机制非常相似,但是又增加了如下功能:

1 可以方便的获取某一个想要的扩展实现,java的SPI机制就没有提供这样的功能

2 对于扩展实现IOC依赖注入功能:

举例来说:接口A,实现者A1、A2。接口B,实现者B1、B2。

现在实现者A1含有setB()方法,会自动注入一个接口B的实现者,此时注入B1还是B2呢?都不是,而是注入一个动态生成的接口B的实现者B$Adpative,该实现者能够根据参数的不同,自动引用B1或者B2来完成相应的功能

3 对扩展采用装饰器模式进行功能增强,类似AOP实现的功能

以下面的例子为例来分析下:

其中Protocol接口定义如下:

对应的实现者如下:

ExtensionLoader中含有一个静态属性:
ConcurrentMap, ExtensionLoader>EXTENSION_LOADERS = new ConcurrentHashMap, ExtensionLoader>();

用于缓存所有的扩展加载实例,这里加载Protocol.class,就以Protocol.class为key,创建的ExtensionLoader为value存储到上述EXTENSION_LOADERS中

这里没有进行任何的加载操作。

我们来看下,ExtensionLoader实例是如何来加载Protocol的实现类的:

1 先解析Protocol上的Extension注解的name,存至String cachedDefaultName属性中,作为默认的实现

2 到类路径下的加载 META-INF/services/com.alibaba.dubbo.rpc.Protocol文件

分享到:
评论
1 楼 lotusxyhf 2017-06-09  
那就


相关推荐

    Dubbo源码分析之SPI

    总的来说,Dubbo的SPI机制是其强大功能背后的关键技术之一,它不仅提供了类似Java SPI的服务发现能力,还通过一系列的增强,使得服务的扩展和管理变得更加高效和便捷。在深入研究`dubbo-spi`和`java-spi`这两个...

    Java SPI 机制(SPI实战+ServiceLoader源码分析+SPI 应用场景+破坏双亲委派)

    Java SPI 机制详解 Java SPI 机制,全称 Service Provider Interface,是 Java 内置的服务发现机制。SPI 机制的主要思想是解耦,通过提供一个标准接口,允许第三方提供实现类,而无需在程序中硬编码。SPI 机制广泛...

    dubbo spi可扩展机制源码解析

    Dubbo SPI(Service Provider Interface)是阿里巴巴开源的Dubbo框架中的一个重要特性,它提供了一种动态发现服务提供者和加载实现类的机制,使得服务消费者无需关心服务提供者的具体实现,增强了系统的可扩展性和...

    Java类加载及SPI机制.pdf

    Java类加载机制和SPI(ServiceProviderInterface)机制是Java平台中极其重要的两个概念,它们对于Java程序的灵活性和可扩展性起到关键作用。下面详细解释这两个机制的概念、原理和应用场景。 类加载机制是Java...

    36_SPI是啥思想?dubbo的SPI机制是怎么玩儿的?.zip

    Dubbo作为一款高性能的Java RPC框架,也引入了类似的SPI机制,但相对于Java内置的SPI,Dubbo的SPI机制更为强大和灵活。Dubbo的SPI机制主要由`dubbo-common`模块中的`ExtensionLoader`类实现,它支持以下特性: 1. ...

    Dubbo调用java接口程序

    在分布式系统中,Dubbo是一个广泛使用的高性能Java RPC框架,由阿里巴巴开源。它提供了一种服务治理、远程调用、集群容错、监控等全面功能,使得开发者可以方便地构建可扩展的服务架构。本篇文章将深入讲解如何使用...

    dubbo源码分析系列

    - SPI(Service Provider Interface)机制:Dubbo如何利用Java的SPI实现插件化设计,允许开发者灵活扩展和替换组件。 - 过滤器链:了解过滤器在Dubbo中的作用,以及如何编写自定义过滤器实现特定功能。 通过对...

    dubbo-spi_mouse1oc_dubbospi_

    通过SPI机制,Dubbo可以灵活地扩展其功能,使得开发者能够按照自己的需求定制服务行为。在本文中,我们将深入探讨Dubbo SPI的工作原理及其相关知识点。 首先,我们需要理解什么是SPI。SPI(Service Provider ...

    1.为什么dubbo要自己设计一套SPI.txt

    #### 三、Dubbo SPI改进之处 针对原始JDK SPI的这些不足,Dubbo在其基础上进行了扩展和优化: 1. **增加缓存机制**: - Dubbo设计了一个缓存对象`cachedInstances`,用于存储SPI的key与value。`cachedInstances`...

    03-05-11-Apache Dubbo 进阶之内核剖析md1

    ### Apache Dubbo 进阶之内核剖析:深入SPI机制 #### 一、引言 Apache Dubbo是一款高性能、轻量级的开源微服务框架,它提供了面向接口的远程方法调用设计,使得开发者能够像调用本地方法一样调用远程方法。Dubbo...

    深度解析Dubbo的可扩展机制SPI源码:从理论到实践,打造高效、稳定的分布式服务框架.rar

    Dubbo则在其之上构建了自己的SPI机制,以满足更高级别的服务治理需求。 Dubbo的SPI机制主要由以下几个关键组件构成: 1. **配置文件**:Dubbo的扩展点配置通常保存在`META-INF/dubbo.properties`或`META-INF/...

    dubbo的SPI-扩展点机制

    dubbo的核心思想就是SPI思想,想读懂dubbo源码应该认真的看下,详细的讲解了dubbo的SPI思想,从为什么,是什么,怎么做的来分析了dubbo的spi思想

    【JAVA分布式系列】dubbo

    【JAVA分布式系列】dubbo 在Java开发领域,分布式服务框架是实现大型系统高可用、可扩展的关键技术。阿里巴巴的Dubbo是一个卓越的开源框架,它致力于提供高性能、透明化的RPC(远程过程调用)服务,使开发者能够...

    深度解析Dubbo的可扩展机制SPI源码:从理论到实践,打造高效、稳定的分布式服务框架

    Dubbo的可扩展机制SPI(Service Provider Interface)是其核心特性之一,允许开发者根据需要动态扩展服务。SPI机制使得Dubbo作为一个高度可定制化的RPC框架,可以轻松地添加新的服务协议、序列化方式等组件。下面...

    dubbo-thought.7z

    Dubbo SPI是阿里巴巴开源的高性能RPC框架Dubbo中的服务发现机制,它在Java SPI的基础上进行了扩展和优化,以适应微服务架构中的服务治理需求。 在Java SPI中,服务接口定义在`META-INF/services`目录下的一个以接口...

    java1.8 最新dubbo-admin.war

    《Java 1.8与Dubbo Admin:深入理解与应用》 在当今的软件开发领域,Java 1.8作为一款强大的编程语言,其稳定性和性能优化能力深受开发者喜爱。而Dubbo,作为阿里巴巴开源的一款高性能、轻量级的服务治理框架,更是...

    尚硅谷Java视频教程_Dubbo

    本套视频从分布式系统的基本概念出发,由浅入深,讲解了RPC原理,Dubbo基本使用,Dubbo高可用场景以及Dubbo原理,涉及了分布式系统中服务注册、服务发现、负载均衡、灰度发布、集群容错、服务降级等核心概念的讲解及...

    Dubbo+zookeeper调用java接口

    在IT行业中,分布式服务框架是构建大型复杂系统的关键技术之一,Dubbo作为阿里巴巴开源的一款高性能、轻量级的Java RPC框架,广泛应用于微服务架构之中。Zookeeper,则是Apache的一个分布式服务协调框架,常用于服务...

Global site tag (gtag.js) - Google Analytics