SPI ,全称为 Service Provider Interface,是一种服务发现机制
一、java应用
1.创立interface接口com.xxx.IService
2.创立两个实现类AImpl和BImpl,实现IService接口
3.工程resources门路下,META-INF下创立services文件夹,以IService的门路命名文件(文件名com.xxx.IService)
resources | --META-INF | --services | --com.xxx.IService
文件中写明实现类全门路(com.xxx.impl.AImpl和com.xxx.impl.BImpl)
则通过以下形式能获取IService实现
ServiceLoader<IService> serviceLoader = ServiceLoader.load(IService.class);//iterator获取了IService的全副实现Iterator<IService> iterator = serviceLoader.iterator();while (iterator.hasNext()){ iterator.next().doSomething();}
将接口(IService)替换成抽象类、一般类仍然见效
二、spring应用
resources | --META-INF | --spring.factories
在spring.factories文件中注明依赖关系
com.xxx.IService=com.xxx.impl.AImpl,\com.xxx.impl.BImpl
获取形式:
@Testpublic void testBootSpi(){ List<IService> serviceList = SpringFactoriesLoader.loadFactories(IService.class, ClassUtils.getDefaultClassLoader()); for (IService service : serviceList) { service.doSomething(); }}