簡稱: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"));
}
}
}