SPI机制
SPI机制
什么是SPI?
SPI 即 Service Provider Interface(服务提供者的接口),服务提供者来实现这个接口,从而实现无需修改源代码,扩展程序、解耦的效果。
很多框架都使用了 Java 的 SPI 机制,比如:Spring 框架、数据库加载驱动、日志接口、以及 Dubbo 的扩展实现等等
API和SPI区别
API:由实现方定义和实现具体内容
SPI:由调用方实现具体内容,实现方定义具体接口
实现方式
JDK中的 ServiceLoader
需要在项目路径下MATE-INF/services文件目录下,创建以接口全路径的文件名的文件,实现类全路径为内容,以行为分割。
缺点:虽然是懒实例化,但是不管你使用不使用都会给你把class对象加载进来
JDBC中的 SPI
当我们去使用JDBC的时候,会去加载驱动类,但是我们必须指定的实现类,这种也是SPI的体现
1
2
3
4
5
6// 加载 MySQL 驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取数据库连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/database_name", "username", "password");spring boot中的 factorys
在spring 中的META-INF目录下创建spring.fatories文件, 也是spring boot starter的原理
1
2
3接口全路径=\
具体实现类1,\
具体实现类2...
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 🍍Blog!






