基本概念
SPI(Serivce Provider Interface):它是从java6开始引入的,一种基于classloader来发现并加载服务的机制。
一个标准的SPI有三个组件构成: - Service:是一个公开的接口或抽象类,定义了一个抽象的功能模块 - Service Provider:service的一个实现类 - ServiceLoader:核心组件,负责在运行时发现并加载service provider
SPI运行流程
Application无需关注service的具体实现,只需面向接口编程
Java SPI在JDBC中的应用
- 在Java SPI前,我们需要编码去注册驱动Class.forName("com.mysql.jdbc.Driver")
- 在引入Java SPI后,我们只需要日引入对应的依赖jar包即可
Java SPI的三大规范要素
小结
- 作用:提供了一种组件发现和注册的方式,可以用于实现各种插件,或者灵活替换所使用的组件
- 优点:面向接口编程,优雅的实现模块之间的解耦
- 设计思想:面向接口+配置文件+反射技术
- 应用场景:JDBC、SLF4J等