Java 之 SPI机制

对着背影说爱祢 提交于 2019-12-02 02:48:55

1.概念:

  a.定义:全称Service Provider Interface,即为某个接口寻找服务实现的机制。

  b.约定:

    1)在 META-INF/services/ 目录中创建以接口全限定名命名的文件,该文件内容为API具体实现类的全限定名

    2)使用 ServiceLoader 类动态加载 META-INF 中的实现类

    3)如 SPI 的实现类为 Jar 则需要放在主程序 ClassPath 中

    4)API 具体实现类必须有一个不带参数的构造方法

  c.意义:可以基于接口编程,实现模块间的解耦

 

2.使用:

  a.创建接口

package com.wode.spi;

public interface Search {

    public String search();

}

 

  b.创建实现类

package com.wode.spi.impl;

import com.wode.spi.Search;

public class FileSearch implements Search {

    @Override
    public String search() {
        return "search from file";
    }

}
package com.wode.spi.impl;

import com.wode.spi.Search;

public class DatabaseSearch implements Search {

    @Override
    public String search() {
        return "search from db";
    }
}

 

  c.在 resources/META-INF/services 下创建文件 com.wode.spi.Search(与接口全类名相同)

com.wode.spi.impl.FileSearch
com.wode.spi.impl.DatabaseSearch

 

  d.测试

        ServiceLoader<Search> serviceLoader = ServiceLoader.load(Search.class);
        Iterator<Search> searchs = serviceLoader.iterator();
        while (searchs.hasNext()) {
            Search search = searchs.next();
            System.out.println(search.search());
        }

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!