java spi实例 本文主要介绍java spi的作用和使用方法。 主要参考: http://www.cnblogs.com/javaee6/p/3714719.html
首先说一下java spi的全称Service Provider Interface。从全称中我们能够看出spi的作用是服务提供接口,这个怎么理解呢,比如平常的编程多数都是面向接口编程,那么在使用哪个具体的实现类一般是硬编码在代码里面的,但是有了java spi,我们就可以实现真正的可插拔了。就是说具体使用哪个实现类和代码无关,是需要在配置文件中配置即可。
好,下面上货: 1、新建一个接口:
package com.xueyou.spidemo;
public interface Animal {
public void eat();
}
2、为这个接口编写两个实现类
package com.xueyou.spidemo;
public class Cat implements Animal{
public void eat() {
System.out.println("cat eat...");
}
}
package com.xueyou.spidemo;
public class Dog implements Animal {
public void eat() {
System.out.println("dog eat...");
}
}
3、在resources文件夹下添加META-INF.service文件夹,并且在其中定义一个以接口全名为文件名称的文件,如图:
文章图片
文件的内容如下:
com.xueyou.spidemo.Cat
com.xueyou.spidemo.Dog
4、编写App程序,测试一下如何实现动态插拔。
package com.xueyou.spidemo;
import java.util.Iterator;
import java.util.ServiceLoader;
/**
* Hello world!
*/
public class App {
public static void main(String[] args) {
System.out.println("Hello World!");
ServiceLoader serviceLoader = ServiceLoader.load(Animal.class);
Iterator iterator = serviceLoader.iterator();
while (iterator.hasNext()){
Animal animal = iterator.next();
animal.eat();
}}
}
5、看一下程序运行的结果:
文章图片
如果这是修改一下接口文件中的内容,那么程序运行的结果就会不同。这样就实现了接口实现类的插拔。