简称:Service Provider Interfaces ,目的是定义个服务接口,具体的实现由对应的服务商提供,然后根据SPI规范去获取对应服务提供者的实现
使用场景:开源程序,支持将来需要扩展的种类业务,JDBC,apache common日志
package com.jack.test;
public interface LogHandle {
public String handleLog(String log);
}
package com.jack.test;
public class LinuxLogHandle implements LogHandle {
@Override
public String handleLog(String log) {
// TODO Auto-generated method stub
return "linux-------------------"+log;
}
}
package com.jack.test;
public class WindowsLogHandle implements LogHandle {
@Override
public String handleLog(String log) {
// TODO Auto-generated method stub
return "windows-------------------"+log;
}
}
//打成jar丢到
//新建一个工程
package com.jack.spitest;
import java.util.Iterator;
import java.util.ServiceLoader;
import com.jack.test.LogHandle;
public class Test {
public static void main(String[] args) {
System.out.println("test start .......");
ServiceLoader<LogHandle> peoples = ServiceLoader.load(LogHandle.class);
Iterator<LogHandle> iterator = peoples.iterator();
while (iterator.hasNext()) {
LogHandle people = iterator.next();
System.out.println(people.handleLog("test"));
}
}
}