1:创建接口
package com.own.test;
public interface Hello {
public void hello();
}
2:两个实现类
package com.own.test.impl;
import com.own.test.Hello;
public class HelloImpl implements Hello{
@Override
public void hello() {
System.out.println("hellohellohellohellohellohellohellohello");
}
}
package com.own.test.impl;
import com.own.test.Hello;
public class HelloTwoImpl implements Hello{
@Override
public void hello() {
System.out.println("HelloTwoImplHelloTwoImplHelloTwoImplHelloTwoImpl");
}
}
3:创建META-INF\services文件夹,添加文件com.own.test.Hello
com.own.test.impl.HelloImpl
com.own.test.impl.HelloTwoImpl
4:测试类
package com.own.test;
import java.util.ServiceLoader;
public class SpiMain {
public static void main(String[] args) {
ServiceLoader h = ServiceLoader.load(Hello.class);
for (Hello hello : h) {
hello.hello();
}
}
}
测试根据文件com.own.test.Hello内容的改变,可以调用不同接口
注意:META-INF文件夹在本地工程目录里面也有,但是不是这个文件,如果是MAVEN项目就在resources先新建一个文件夹,这样ServiceLoader才能找到这个类,参照jdk文件
ServiceLoader.load(service)
等价于:
ServiceLoader.load(service,
Thread.currentThread().getContextClassLoader())