主要是从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
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();
}
}
}
博客介绍了通过META - INF/services目录下的配置文件加载给定接口或基类实现的方法。ServiceLoader根据类的全名在该目录找对应文件,文件中定义子类或接口实现类,最后返回实例。还提及定义接口、实现类及创建文件等步骤。

被折叠的 条评论
为什么被折叠?



