java SPI 代码示例

SPI 是 Service Provider Interface 的缩写,中文解释为服务提供发现接口

SPI 是一种基于「接口 + 策略模式 + 配置文件」组合实现的动态加载接口实现类的机制

实现步骤:

  • 在类路径下的 META-INF/services 目录下,创建以服务接口的 "全限定名" 命名的文件,文件的内容为接口实现类的全限定名,每行一个接口实现
  • 实现类必须在当前程序的 classpath 下
  • 使用 java.util.ServiceLoader 动态加载接口实现(ServiceLoader 会自动扫描 META-INF/services 下的配置文件加载实现类)

示例如下:

1、创建接口

package com.test.root.base.spi;

public class FirstSpiService implements SimpleSpiService {
    @Override
    public void say() {
        System.out.println("Say first!");
    }
}

2、实现接口

package com.test.root.base.spi;

public class FirstSpiService implements SimpleSpiService {
    @Override
    public void say() {
        System.out.println("Say first!");
    }
}
package com.test.root.base.spi;

public class SecondSpiService implements SimpleSpiService {
    @Override
    public void say() {
        System.out.println("Say Second!");
    }
}

3、创建 SPI 文件

SPI文件内容

com.test.root.base.spi.FirstSpiService
com.test.root.base.spi.SecondSpiService

2、加载并使用接口实现

package com.test.root.base.spi;

import java.util.ServiceLoader;

public class SpiTest {

    public static void main(String[] args) {
        ServiceLoader<SimpleSpiService> simpleSpiServices = ServiceLoader.load(SimpleSpiService.class);
        for (SimpleSpiService simpleSpiService : simpleSpiServices) {
            simpleSpiService.say();
        }
    }

}

 

posted @ 2024-11-07 14:58  lenbkan  阅读(25)  评论(0编辑  收藏  举报