Java SPI机制学习

许多框架在编写时,都用到了SPI机制。那我们今天就来说说什么是SPI机制。

SPI机制:service provider interface,弱译:接口提供服务(白话翻译)。

网络语言:基于接口的编程+策略模式+配置文件”组合实现的动态加载机制

定义接口类(interface) +多个类对同一接口的实现(implements)+接口类和实现类进行一个配置( src/main/resources/ /META-INF/services/接口的类名)

接口名的类的内容是实现类的类名这里所指类名都是全额限定名

将类打包后,引用该jar包,然后运行mian方法或者调用方就可以直接访问了。这是为什么呢?

下面就来说说:

其实是JDK中 自带的 java.util.ServiceLoader类起了作用。

这个类的代码为:

public final class ServiceLoader<S> implements Iterator<S>{
    private static final String PREFIX="META-INF/services/;
    private final Class<S> service;
    private final ClassLoader loader;
    private final AccessControlContext acc;
    private LinkedHashMap<String,S> providers=new LinkedHashMap<String,S>();
    private LazyIterator lookupIterator;

}

PREFIX代表了配置文件的地址

loader负责去装载类的字节码文件------将字节码文件交给service;service调用instance方法,通过无惨构造方法去实例化对象。

----将实例化好的对象放到providers中,以便调用。最后通过lookupIterator去迭代这个providers,方便来获取实例。

在这个过程中,是通过java反射实现的。所以在多线程是不安全的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值