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实例
文章图片


文件的内容如下:
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、看一下程序运行的结果: java spi实例
文章图片




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

    推荐阅读