java的SPI机制和Dubbo的SPI机制

心已赠人 2022-12-27 01:19 241阅读 0赞

java的SPI机制和Dubbo的SPI机制

简介

SPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。

Java的SPI实现

1.接口,Hello

  1. package com.ls.spi.jdk;
  2. /** * Created by ls on 2020/12/6. */
  3. public interface Hello {
  4. void sayHi();
  5. }

2.下面是两个实现类

  1. package com.ls.spi.jdk;
  2. /** * Created by ls on 2020/12/6. */
  3. public class GoHello implements Hello {
  4. @Override
  5. public void sayHi() {
  6. System.out.println("go hello");
  7. }
  8. }
  9. package com.ls.spi.jdk;
  10. /** * Created by ls on 2020/12/6. */
  11. public class JavaHello implements Hello {
  12. @Override
  13. public void sayHi() {
  14. System.out.println("java hello");
  15. }
  16. }
  17. package com.ls.spi.jdk;
  18. import java.util.ServiceLoader;
  19. /** * Created by ls on 2020/12/6. */
  20. public class TestRun {
  21. public static void main(String[] args) {
  22. ServiceLoader<Hello> load = ServiceLoader.load(Hello.class);
  23. load.forEach(Hello::sayHi);
  24. }
  25. }

5.在classpath下创建META-INF/services的文件,创建文件名为:com.ls.spi.jdk.Hello:如下图
在这里插入图片描述
6.运行结果
在这里插入图片描述

Dubbo的SPI

官网:http://dubbo.apache.org/zh/docs/v2.7/dev/impls/protocol/
案例实现:

  1. @SPI
  2. public interface ISend {
  3. void send();
  4. }
  5. public class QqSend implements ISend{
  6. @Override
  7. public void send() {
  8. System.out.println("qq");
  9. }
  10. }
  11. public class WxSend implements ISend{
  12. @Override
  13. public void send() {
  14. System.out.println("wx");
  15. }
  16. }
  17. public class TestRun {
  18. public static void main(String[] args) {
  19. ExtensionLoader<ISend> extensionLoader = ExtensionLoader.getExtensionLoader(ISend.class);
  20. ISend qq = extensionLoader.getExtension("qq");
  21. qq.send();
  22. }
  23. }

配置文件:
在这里插入图片描述

运行结果:
在这里插入图片描述
Maven依赖

  1. <dubbo.version>2.7.7</dubbo.version>
  2. <dependency>
  3. <groupId>org.apache.dubbo</groupId>
  4. <artifactId>dubbo</artifactId>
  5. <version>${dubbo.version}</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.apache.dubbo</groupId>
  9. <artifactId>dubbo-dependencies-zookeeper</artifactId>
  10. <version>${dubbo.version}</version>
  11. </dependency>

发表评论

表情:
评论列表 (有 0 条评论,241人围观)

还没有评论,来说两句吧...

相关阅读

    相关 jdkdubboSPI机制

    [jdk和dubbo的SPI机制][jdk_dubbo_SPI] 前言:开闭原则一直是软件开发领域中所追求的,开闭原则中的"开"是指对于组件功能的扩展是开放的,是允许对其