SPI加载机制
SPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。
使用SPI:
1.定义SPI接口
2.定义SPI接口实现类
3.在资源文件目录下创建 META-INF/services 目录,在目录下添加SPI接口全限定类名文件
4.在创建的文件里添加SPI接口实现类的全限定类名
5.定义执行方法,ServiceLoader.load()或Service.providers()两个方法加载所定义的类
6.通过上面说到的两个类各自实现的Iterator 获取实现类
原理剖析:
1.为什么要在ClassPath:META-INF/services 下创建文件?
源码里定义的路径
2.通过什么实现的?
实现一个Iterator并传入加载类型和加载器,如果没有实现加载器,会使用默认加载器Thread.currentThread().getContextClassLoader() 获取实现类。