簡介
SPI 全稱爲Service Provider Interface,是一種服務發現機制。SPI 的本質是將接口實現類的全限定名配置在文件中,並由服務加載器讀取配置文件,加載實現類。這樣可以在運行時,動態爲接口替換實現類。正因此特性,我們可以很容易的通過 SPI 機制爲我們的程序提供拓展功能。
Java原生SPI使用步驟
1 定義接口
package com.chen.service;
public interface Root {
void sayHello();
}
2 定義實現
- 實現1
package com.chen.impl;
import com.chen.service.Root;
public class Bumblebee implements Root {
@Override
public void sayHello() {
System.out.println("Hello, I am Bumblebee.");
}
}
- 實現2
package com.chen.impl;
import com.chen.service.Root;
public class OptimusPrime implements Root {
@Override
public void sayHello() {
System.out.println("i am Optimus Prime");
}
}
3 創建配置文件
創建名稱爲接口全限定名的文件,放置於resources/META-INF/services目錄下
com.chen.impl.OptimusPrime
com.chen.impl.Bumblebee
4 調用實現
public class JavaSPITest {
@Test
public void sayHello(){
ServiceLoader<Root> serviceLoader = ServiceLoader.load(Root.class);
System.out.println("Java SPI");
serviceLoader.forEach(Root::sayHello);
}
}
通過此種方式便可以調用我們所定義到的實現。