主要是从META-INF/services这个目录下的配置文件加载给定接口或者基类的实现,ServiceLoader会根据给定的类的full name来在META-INF/services下面找对应的文件,在这个文件中定义了所有这个类的子类或者接口的实现类,返回一个实例。
首先定义一个接口
public interface PayService {
void pay();
}
定义两个实现类
public class AliPayService implements PayService {
@Override
public void pay() {
System.out.println("支付宝支付");
}
}
public class WxPayService implements PayService {
@Override
public void pay() {
System.out.println("微信支付");
}
}
需要在META-INF/services下以PayService 这个类的全名来新建立一个文件,文件中的内容为两个实现类的全名,如下
com.sl.service.AliPayService
com.sl.service.WxPayService
image.png
public class Test1 {
public static void main(String[] args) {
//System.out.println(BigInteger.probablePrime(10,new Random()));
ServiceLoader<PayService> load = ServiceLoader.load(PayService.class);
for (PayService payService:load) {
payService.pay();
}
}
}
网友评论