SPI

SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。

Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。

实现

1、定义接口

public interface Animal {
    void say();
}  

2、接口实现类

public class Cat implements Animal {

    @Override
    public void say() {
        System.out.println("i'm a cat");
    }
}
public class Dog implements Animal {

    @Override
    public void say() {
        System.out.println("i'm a dog");
    }
}

3、在META-INF/services目录下创建和配置对应的文件

com.vincent.spi.Cat
com.vincent.spi.Dog

4、测试

public class SPIMain {

    public static void main(String[] args) {
        ServiceLoader<Animal> loaders =
                ServiceLoader.load(Animal.class);
        for (Animal animal : loaders) {
            animal.say();
        }

    }
} 

 输出结果:

public class SPIMain {

    public static void main(String[] args) {
        ServiceLoader<Animal> loaders =
                ServiceLoader.load(Animal.class);
        for (Animal animal : loaders) {
            animal.say();
        }

    }
}

5、应用

应用到java spi的框架还是很多的,如:

(1)spring的web包

 

(2)durid连接池

(3)数据库驱动加载

等等。。。

 

posted on 2019-04-20 22:14  幽人月  阅读(243)  评论(0编辑  收藏  举报