Service Provider Interface
java spi
java提供的一套用来被第三方实现或扩展的api,这是一种面向对象编程的思想,其使用有如下规定:
1 服务提供者,在jar包的META-INF/service下定义一个文件, 名称为接口全限名,内容为实现类
2 实现类所在的jar必须在主程序的classpath中
3 主程序通过java.util.ServiceLoader将实现类加载到jvm中
4 实现类必须提供无参构造函数
使用场景很多:
1 数据库驱动接口的不同实现加载
2 日志门面的不同实现加载等等
spring spi
spring也提供了类似的功能。使用规范如下:
1 在META-INF下定义spring.factories,内容为{接口名}={实现类}[,{实现类}]
2 spring在启动的时候会通过钩子调用org.springframework.core.io.support.SpringFactoriesLoader.loadFactoryNames进行加载
使用场景很多:
1 我们都知道spring-boot提供了自动配置的功能,我们在开发一些公共组件的时候,可以通过该功能实现使用者无需配置即可依赖使用,这种技术就是使用了spring的spi功能,具体使用方式如下:
2 例如自动加载配置中心配置的客户端等等