【视频讲解配套PPT】Java SPI | Dubbo SPI |Spring SPI有什么区别

简介: SPI(Service Provider Interface)是一种服务发现机制,它通过在类路径下的META-INF/services目录下的配置文件来发现服务实现类,实现了面向接口编程的扩展性。

配套视频:https://cloud.tencent.com/developer/user/6026903/video
image.png

SPI(Service Provider Interface)是一种服务发现机制,它通过在类路径下的META-INF/services目录下的配置文件来发现服务实现类,实现了面向接口编程的扩展性。

Java SPI是JDK自带的一种SPI机制,它通过在META-INF/services目录下的配置文件中指定接口的实现类来实现。Java SPI只能加载到类路径下的实现类,不支持动态添加和删除实现类。Java SPI的实现代码示例如下:

定义接口

public interface MyService {
    void doSomething();
}

实现接口

public class MyServiceImpl implements MyService {
    @Override
    public void doSomething() {
        System.out.println("do something by MyServiceImpl");
    }
}

配置文件
在META-INF/services目录下创建一个以接口全限定名为文件名的文件,并在文件中指定实现类的全限定名。

com.example.MyService
com.example.MyServiceImpl
加载实现类
public class Main {
    public static void main(String[] args) {
        ServiceLoader<MyService> loader = ServiceLoader.load(MyService.class);
        for (MyService service : loader) {
            service.doSomething();
        }
    }
}

Dubbo SPI是Apache Dubbo框架自带的一种SPI机制,它在Java SPI基础上进行了扩展,支持动态添加和删除实现类。Dubbo SPI的实现代码示例如下:

定义接口

@SPI("default")
public interface MyService {
    void doSomething();
}

实现接口

@SPI("impl1")
public class MyServiceImpl1 implements MyService {
    @Override
    public void doSomething() {
        System.out.println("do something by MyServiceImpl1");
    }
}

@SPI("impl2")
public class MyServiceImpl2 implements MyService {
    @Override
    public void doSomething() {
        System.out.println("do something by MyServiceImpl2");
    }
}

配置文件
在META-INF/dubbo目录下创建一个以接口全限定名为文件名的文件,并在文件中指定实现类的名称和对应的扩展名。

# META-INF/dubbo/com.example.MyService
impl1=com.example.MyServiceImpl1
impl2=com.example.MyServiceImpl2

加载实现类

public class Main {
    public static void main(String[] args) {
        ExtensionLoader<MyService> loader = ExtensionLoader.getExtensionLoader(MyService.class);
        MyService service = loader.getExtension("impl1");
        service.doSomething();
    }
}

Spring SPI是Spring框架自带的一种SPI机制,它通过在META-INF/spring.factories文件中指定实现类来实现。Spring SPI的实现代码示例如下:

定义接口

public interface MyService {
    void doSomething();
}

实现接口

public class MyServiceImpl implements MyService {
    @Override
    public void doSomething() {
        System.out.println("do something by MyServiceImpl");
    }
}

配置文件
在META-INF/spring.factories文件中指定实现类的全限定名。

com.example.MyService=com.example.MyServiceImpl

加载实现类

public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext();
        MyService service = context.getBean(MyService.class);
        service.doSomething();
    }
}
目录
相关文章
|
21小时前
|
Java 关系型数据库 MySQL
【Java——SPI机制详解】
SPI(Service Provider Interface),是JDK内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如java.sql.Driver接口,其他不同厂商可以针对同一接口做出不同的实现,MySQL和PostgreSQL都有不同的实现提供给用户,而Java的SPI机制可以为某个接口寻找服务实现。Java中SPI机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是 解耦。 当服务的提供者提供了一种接口的实现之后,需要在classpath下的META-INF/services/目录里创建一个以服务接口命名的
|
22小时前
|
JavaScript Java 测试技术
Java项目基于ssm+vue.js的网上手机销售系统附带文章和源代码设计说明文档ppt
Java项目基于ssm+vue.js的网上手机销售系统附带文章和源代码设计说明文档ppt
5 0
|
22小时前
|
JavaScript Java 测试技术
Java项目基于ssm+vue.js的生鲜在线销售系统附带文章和源代码设计说明文档ppt
Java项目基于ssm+vue.js的生鲜在线销售系统附带文章和源代码设计说明文档ppt
5 0
|
22小时前
|
JavaScript Java 测试技术
Java项目基于ssm+vue.js的经典电影推荐网站附带文章和源代码设计说明文档ppt
Java项目基于ssm+vue.js的经典电影推荐网站附带文章和源代码设计说明文档ppt
5 0
|
22小时前
|
JavaScript Java 测试技术
Java项目基于ssm+vue.js的餐馆点餐系统附带文章和源代码设计说明文档ppt
Java项目基于ssm+vue.js的餐馆点餐系统附带文章和源代码设计说明文档ppt
6 0
|
22小时前
|
JavaScript Java 测试技术
Java项目基于ssm+vue.js的影视创作论坛附带文章和源代码设计说明文档ppt
Java项目基于ssm+vue.js的影视创作论坛附带文章和源代码设计说明文档ppt
7 0
|
22小时前
|
JavaScript Java 测试技术
Java项目基于ssm+vue.js的航空票务推荐系统附带文章和源代码设计说明文档ppt
Java项目基于ssm+vue.js的航空票务推荐系统附带文章和源代码设计说明文档ppt
5 0
|
22小时前
|
JavaScript Java 测试技术
Java项目基于ssm+vue.js的仓库管理系统附带文章和源代码设计说明文档ppt
Java项目基于ssm+vue.js的仓库管理系统附带文章和源代码设计说明文档ppt
4 0
|
22小时前
|
JavaScript Java 测试技术
Java项目基于ssm+vue.js的智能社区管理系统附带文章和源代码设计说明文档ppt
Java项目基于ssm+vue.js的智能社区管理系统附带文章和源代码设计说明文档ppt
4 0
|
22小时前
|
JavaScript Java 测试技术
Java项目基于ssm+vue.js的高校勤工助学系统附带文章和源代码设计说明文档ppt
Java项目基于ssm+vue.js的高校勤工助学系统附带文章和源代码设计说明文档ppt
5 0