原文:http://www.ccblog.cn/75.htm 这里看的更清晰写
一:SPI 简介
SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现,而后,把新加的实现,描述给JDK知道就行啦(通过改一个文本文件即可) ,公司内部目前Dubbo框架就基于SPI机制提供扩展功能。
代码例子
public interface Cmand { public void execute(); } public class ShutdownCommand implements Cmand { public void execute() { System.out.println("shutdown...."); } } public class StartCommand implements Cmand { public void execute() { System.out.println("start...."); } } public class SPIMain { public static void main(String[] args) { ServiceLoader<Cmand> loader = ServiceLoader.load(Cmand.class); System.out.println(loader); for (Cmand Cmand : loader) { Cmand.execute(); } } }
配置:
com.unei.serviceloader.impl.ShutdownCommand
com.unei.serviceloader.impl.StartCommand
运行结果:
java.util.ServiceLoader[com.unei.serviceloader.Cmand] shutdown.... start....