Dubbo的SPI机制

这篇具有很好参考价值的文章主要介绍了Dubbo的SPI机制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Dubbo SPI的基本工作流程:

  1. 加载扩展点配置:Dubbo SPI首先会加载所有的扩展点配置,这些配置通常是在META-INF/dubbo目录下的properties文件中定义的。每个配置文件的名称就是扩展点接口的全限定名,文件内容是扩展点实现的键值对,键是扩展点的名称,值是扩展点实现类的全限定名。

  2. 创建扩展点实例:当用户获取一个扩展点时,Dubbo SPI会根据配置文件创建一个扩展点实例。如果配置文件中定义了多个扩展点实现,用户可以通过扩展点的名称获取特定的实现。

  3. 注入依赖:Dubbo SPI支持对扩展点实例进行依赖注入。如果扩展点实现类有其他扩展点的依赖,Dubbo SPI会自动将这些依赖注入到实例中。

  4. 包装扩展点:Dubbo SPI还支持对扩展点进行包装。用户可以定义一个包装类,这个类需要有一个接受原始扩展点实例的构造方法。当用户获取扩展点时,Dubbo SPI会自动用包装类包装原始的扩展点实例。

Dubbo的SPI机制,dubbo,SPI

Dubbo SPI主要支持两种类型的依赖注入:

  1. Setter注入:这是最常见的一种依赖注入方式。在扩展点实现类中,如果有一个public的setter方法,且方法的参数类型是另一个扩展点接口,那么Dubbo SPI会自动调用这个setter方法,将对应的扩展点实例注入进去。例如,如果有一个setter方法是setFilter(Filter filter),那么Dubbo SPI会自动创建一个Filter的扩展点实例,并通过这个setter方法注入。

  2. 构造方法注入:除了setter注入,Dubbo SPI还支持通过构造方法进行依赖注入。如果扩展点实现类有一个构造方法,且这个构造方法的参数类型是另一个扩展点接口,那么Dubbo SPI也会自动创建一个对应的扩展点实例,并通过这个构造方法注入。例如,如果有一个构造方法是MyExtension(Filter filter),那么Dubbo SPI也会自动创建一个Filter的扩展点实例,并通过这个构造方法注入。

不支持setter方法和构造方法注入的情况下,Dubbo SPI如何实现依赖注入?

        如果一个扩展点实现类既没有合适的setter方法,也没有合适的构造方法,那么Dubbo SPI是无法直接进行依赖注入的。在这种情况下,我们需要手动进行依赖注入。

        Dubbo SPI提供了一个名为ExtensionLoader的类,这个类提供了一系列的方法,可以用来获取扩展点实例。例如,ExtensionLoader.getExtensionLoader(Filter.class).getExtension("myFilter")可以获取名为"myFilter"的Filter扩展点实例。

        我们可以在扩展点实现类的初始化代码中,使用这种方式手动获取需要的扩展点实例,并进行依赖注入。虽然这种方式比较麻烦,但是它提供了更大的灵活性,可以应对更复杂的依赖关系。

需要注意的是,手动依赖注入的方式并不推荐,因为它增加了代码的复杂性,并且可能导致依赖关系的管理变得困难。在大多数情况下,我们都应该优先使用setter方法或构造方法进行依赖注入。文章来源地址https://www.toymoban.com/news/detail-818069.html

到了这里,关于Dubbo的SPI机制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 趁同事上厕所的时间,看完了 Dubbo SPI 的源码,瞬间觉得 JDK SPI 不香了

    👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主 📕系列专栏:Java设计模式、Spring源码系列、Netty源码系列、Kafka源码系列、JUC源码系列、duubo源码系列 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦

    2024年02月16日
    浏览(40)
  • SpringCloud与Dubbo的区别(全面详解)深入浅出 四、Dubbo原理和机制详解

    初始定位不同:SpringCloud定位为微服务架构下的一站式解决方案;Dubbo 是 SOA 时代的产物,它的关注点主要在于服务的调用和治理 生态环境不同:SpringCloud依托于Spring平台,具备更加完善的生态体系;而Dubbo一开始只是做RPC远程调用,生态相对匮乏,现在逐渐丰富起来。 调用方

    2024年02月10日
    浏览(46)
  • Dubbo 指定调用固定ip+port dubbo调用指定服务 dubbo调用不随机 dubbo自定义调用服务 dubbo点对点通信 dubbo指定ip

    1. 在写分布式im时nami-im: 分布式im, 集群 zookeeper netty kafka nacos rpc主要为gate(长连接服务) logic (业务) lsb (负载均衡)store(存储) - Gitee.com,需要指定某一长连接服务调用,其他博客得都调不通,写的有问题。要不就是通过xml进行配置,本文主要是以代码形式,调用前 配

    2024年02月15日
    浏览(46)
  • 【Dubbo】Dubbo负载均衡实现解析

    📫作者简介: 小明java问道之路 , 2022年度博客之星全国TOP3 ,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司后端高级工程师。          📫 热衷分享,喜欢原

    2024年02月05日
    浏览(48)
  • dubbo监控中心dubbo-admin老版本(dubbo-ops)使用

    1、dubbo分组 在dubbo中,可以指定group,如下: 使用properties如下: group分组的作用: 在服务器资源紧缺的情况下,group可以用来隔离开发环境和测试环境:同一个服务不同的版本可以在相同的注册中心中注册,根据group来隔离不同版本之间的影响 如: 项目开发环境: dubbo.reg

    2024年02月12日
    浏览(47)
  • 【Dubbo】Dubbo架构的演进过程分析

    📫作者简介: 小明java问道之路 , 2022年度博客之星全国TOP3 ,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司后端高级工程师。          📫 热衷分享,喜欢原

    2024年02月07日
    浏览(35)
  • 干翻Dubbo系列第一篇:Dubbo是什么?

    早期Dubbo的定位基于JAVA的高性能,轻量级RPC框架 [high-performance, lightweight,Java-based RPC framework] SOA[Service-Oriented Architecture 面向服务的架构] = RPC+服务治理,服务治理包括注册中心、配置中心等等。 2018年阿里巴巴把这个框架捐献给了 Apache 基金会,正式更名为Apache Dubbo最新版本为

    2024年02月09日
    浏览(44)
  • Dubbo+Zookeeper使用_dubbo zookeeper配置

    } ?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"? 4.0.0 server: port: 8081 spring: application: name: dubbo-consumer dubbo: registry: address: zookeeper://localhost:2181 # 连接到注册中心 protocol: name: dubbo # 指定的协议 port: 28081 # 指定的端口 scan: basePackages: com.hzy.controller # 接口列表和接口中的方法列表 server: port: 8082 spring:

    2024年04月15日
    浏览(33)
  • 【Dubbo核心 详解三】Dubbo服务接口的详解

    ✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Dubbo专栏 本文将介绍 Dubbo 服务接口的基本概念和特点,实现方式和应用场景,以及注册与发现、调用、属性和参数、异常处理、日志和监控、高级特性、微

    2023年04月24日
    浏览(81)
  • Dubbo源码浅析(一)—RPC框架与Dubbo

    RPC,Remote Procedure Call 即远程过程调用,与之相对的是本地服务调用,即LPC(Local Procedure Call)。本地服务调用比较常用,像我们应用内部程序 (注意此处是程序而不是方法,程序包含方法) 互相调用即为本地过程调用,而远程过程调用是指在本地调取远程过程进行使用。 而 RPC框

    2024年02月08日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包