2.1 Java SPI 示例

前面简单介绍了 SPI 机制的原理,本节通过一个示例演示 Java SPI 的使用方法。首先,我们定义一个接口,名称为 Robot。

  1. public interface Robot {
  2. void sayHello();
  3. }

接下来定义两个实现类,分别为 OptimusPrime 和 Bumblebee。

  1. public class OptimusPrime implements Robot {
  2. @Override
  3. public void sayHello() {
  4. System.out.println("Hello, I am Optimus Prime.");
  5. }
  6. }
  7. public class Bumblebee implements Robot {
  8. @Override
  9. public void sayHello() {
  10. System.out.println("Hello, I am Bumblebee.");
  11. }
  12. }

接下来 META-INF/services 文件夹下创建一个文件,名称为 Robot 的全限定名 org.apache.spi.Robot。文件内容为实现类的全限定的类名,如下:

  1. org.apache.spi.OptimusPrime
  2. org.apache.spi.Bumblebee

做好所需的准备工作,接下来编写代码进行测试。

  1. public class JavaSPITest {
  2. @Test
  3. public void sayHello() throws Exception {
  4. ServiceLoader<Robot> serviceLoader = ServiceLoader.load(Robot.class);
  5. System.out.println("Java SPI");
  6. serviceLoader.forEach(Robot::sayHello);
  7. }
  8. }

最后来看一下测试结果,如下:

2.1 Java SPI 示例 - 图1

从测试结果可以看出,我们的两个实现类被成功的加载,并输出了相应的内容。关于 Java SPI 的演示先到这里,接下来演示 Dubbo SPI。