1. 编写一个接口
package com.john.spi;
public interface IPeople {
void sayHello();
}
2. 编写两个实现类
(1)AmericanPeople:
package com.john.spi.impl;
import com.john.spi.IPeople;
public class AmericanPeople implements IPeople {
public void sayHello() {
System.out.println("hello!");
}
}
(2)ChinesePeople:
package com.john.spi.impl;
import com.john.spi.IPeople;
public class ChinesePeople implements IPeople {
public void sayHello() {
System.out.println("你好!");
}
}
3. 编写测试类入口
package com.john.spi;
import java.util.ServiceLoader;
public class SpiMainTest {
public static void main(String[] args) {
ServiceLoader<IPeople> peoples = ServiceLoader.load(IPeople.class);
for(IPeople p : peoples){
p.sayHello();
}
}
}
4. 建文件夹META-INF,然后在META-INF文件夹下再建一个文件夹services
5. 在services文件夹下新建文件,同名接口1(com.john.spi.IPeople),并在文件中编写两个实现类的全路径名
com.john.spi.impl.AmericanPeople
com.john.spi.impl.ChinesePeople
6. 执行测试类3,得到如下结果: