JAVA SPI實例
參考
步驟
新建接口
package com.petecc.platform.foodsafe.spi;
/**
* @Description DatabaseInterface
* @author tanw
* @date 2015年7月24日 下午4:01:32
*/
public interface DatabaseInterface {
public void querySth();
}
實現接口
mysql實現
package com.petecc.platform.foodsafe.spi;
/**
* @Description MysqlQuery
* @author tanw
* @date 2015年7月24日 下午4:02:15
*/
public class MysqlQuery implements DatabaseInterface {
@Override
public void querySth() {
System.out.println("mysql database query something!");
}
}
oracle實現
package com.petecc.platform.foodsafe.spi;
/**
* @Description OracleQuery
* @author tanw
* @date 2015年7月24日 下午4:02:15
*/
public class OracleQuery implements DatabaseInterface {
@Override
public void querySth() {
System.out.println("oracle database query something!");
}
}
服務發現
新建目錄和文件
在類路徑下建立/META-INF/services/目錄,目錄中放文本文件,文件名是接口全名,本例中是com.petecc.platform.foodsafe.spi.DatabaseInterface
將服務實現類寫入接口文件
在com.petecc.platform.foodsafe.spi.DatabaseInterface文件中一行一個實現,填入接口實現類全名,如本例中文件內容爲
com.petecc.platform.foodsafe.spi.MysqlQuery
com.petecc.platform.foodsafe.spi.OracleQuery
測試
package com.petecc.platform.foodsafe.spi;
import java.util.ServiceLoader;
/**
* @Description SPIMain
* @author tanw
* @date 2015年7月24日 下午4:03:19
*/
public class SPIMain {
public static void main(String[] args) {
ServiceLoader<DatabaseInterface> loaders = ServiceLoader
.load(DatabaseInterface.class);
int i=0;
for (DatabaseInterface in : loaders) {
in.querySth();
i++;
}
System.out.println();
System.out.println("找到服務實現類:"+i);
}
}