JAVA基础-SPI

1,什么是SPI

SPI全名Service Provider interface,翻译过来就是“服务提供接口”,再说简单就是提供某一个服务的接口, 提供给服务开发者或者服务生产商来进行实现。

Java SPI 是JDK内置的一种动态加载扩展点的实现。

这个机制在一般的业务代码中很少用到(个人接触到的业务没有用到过),但是再底层框架中却被大量使用,包括JDBC、Dubbo、Spring框架、日志接口中都有用到,不同的是有的使用Java原生的实现,有的框架则自己实现了一套SPI机制。

2,SPI 简单实现

接口
package com.demo.base.spi;
public interface Animal {
void eat();
}
几个实现类
package com.demo.base.spi;
public class Cat implements Animal {
@Override
public void eat() {
System.out.println("老猫也爱吃饭");
}
}
package com.demo.base.spi;
public class Dog implements Animal {
@Override
public void eat() {
System.out.println("狗子爱干饭");
}
}
package com.demo.base.spi;
public class Pig implements Animal {
@Override
public void eat() {
System.out.println("猪吃的最多");
}
}
测试类
package com.demo.base.spi;
import java.util.Iterator;
import java.util.ServiceLoader;
public class SpiDemo {
public static void main(String[] args) {
ServiceLoader<Animal> animals = ServiceLoader.load(Animal.class);
Iterator<Animal> iterator = animals.iterator();
while (iterator.hasNext()){
iterator.next().eat();
}
}
}

/META-INF/services 下定一个文件,文件名与接口权限全限定名一致,文件内容就是要发现的实体类全限定名

com.demo.base.spi.Animal
com.demo.base.spi.Cat
com.demo.base.spi.Dog
com.demo.base.spi.Pig

本文作者:Hi.PrimaryC

本文链接:https://www.cnblogs.com/cnff/p/17534704.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   primaryC  阅读(76)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.