浅析jdk ServiceLoader作用

2019-05-26  本文已影响0人  境里婆娑

主要是从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();
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读