时间记录:2020-05-06
之前在看dubbo的源码的的时候收获颇丰,其中有个很神奇的东西那就是SPI,这个东西解决了我们在使用第三方的框架的东西的时候的扩展问题,也就是接口实现在使用者手上,这就是SPI的基本概念和接口编程是相反的,主要看实现者就可以了。jdk中最早出现是在1.6中出现的,它是通过服务发现的方式来实现的,也就是将对应的接口实现标记到一个配置文件中,然后加载的时候通过策略的方式来实现。最常碰到的就是数据库驱动加载就是有spi的身影,spi只是一种思想具体的实现可以自己定制操作的,dubbo中的spi是自己实现的,后续有时间继续总结。
基本使用
定义接口然后进行实现最后配置到文件中
package com.huo.spi;
/**
* 总接口
* @author kaffeevenus
*/
public interface ParentSpi
{
void saveHello();
}
package com.huo.spi;
/**
* L child
* @Author: kaffeevenus
* @Date: 2020/5/16 15:39
*/
public class LChildSpi implements ParentSpi {
@Override
public void saveHello()
{
System.out.println("child L");
}
}
package com.huo.spi;
/**
* @Author: kaffeevenus
* @Date: 2020/5/16 15:41
*/
public class MChildSpi implements ParentSpi {
@Override
public void saveHello() {
System.out.println("M child");
}
}
package com.huo.spi;
import java.util.ServiceLoader;
/**
* 测试
* @author kaffeevenus
*/
public class TestSpi
{
public static void main(String[] args)
{
ServiceLoader<ParentSpi> spis = ServiceLoader.load(ParentSpi.class);