java spi实例

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文件夹,并且在其中定义一个以接口全名为文件名称的文件,如图:
java spi实例_第1张图片

文件的内容如下:
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、看一下程序运行的结果:




如果这是修改一下接口文件中的内容,那么程序运行的结果就会不同。这样就实现了接口实现类的插拔。

你可能感兴趣的:(spi)