java spi

SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现。
具体是在JAR包的"src/META-INF/services/"目录下建立一个文件,文件名是接口的全限定名,文件的内容可以有多行,每行都是该接口对应的具体实现类的全限定名.

demo实现

package spi;

/**
 * @author linzh
 * @date 2018-03-01 10:10
 */
public interface Animal {
    void voice();
}

package spi;

/**
 * @author linzh
 * @date 2018-03-01 10:11
 */
public class Cat implements Animal {
    @Override
    public void voice() {
        System.out.println("喵喵~~");
    }
}
package spi;

/**
 * @author linzh
 * @date 2018-03-01 10:10
 */
public class Dog implements Animal {
    @Override
    public void voice() {
        System.out.println("汪汪~~");
    }
}

META-INF\services\spi.Animal

spi.Cat
spi.Dog
package spi;

import java.util.ServiceLoader;

/**
 * @author linzh
 * @date 2018-03-01 10:11
 */
public class Main {
    public static void main(String[] args) {
        ServiceLoader loaders = ServiceLoader.load(Animal.class);
        for (Animal d : loaders) {
            d.voice();
        }
    }
}

控制台输出

你可能感兴趣的:(java spi)