SPI
SPI(Service Provider Interface),是JDK内置的一种 服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如java.sql.Driver接口,其他不同厂商可以针对同一接口做出不同的实现,MySQL和PostgreSQL都有不同的实现提供给用户,而Java的SPI机制可以为某个接口寻找服务实现。Java中SPI机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是 解耦。
原文链接:https://pdai.tech/md/java/advanced/java-advanced-spi.html
SPI使用很简单, 在classpath下META-INF/services/
目录里创建一个以服务接口命名的文件, 文件内容是实现类的全类名. JDK中查找服务的实现的工具类是:java.util.ServiceLoader
Slf4j
Slf4j是Java的一个日志门面框架, 它本身不提供日志功能, 而是抽象出一层日志接口以供用户使用. 日志功能实现最终还是依赖Log4j
, Logback
等日志框架.
Slf4j的1.x版本会固定查找org.slf4j.impl.StaticLoggerBinder
类, 而在2.x版本中则使用了SPI机制, 从而不需要创建固定的org.slf4j.impl.StaticLoggerBinder
类.
以Slf4j为例的SPI使用
在资源路径下创建META-INF/services
文件夹, 在文件夹下创建org.slf4j.spi.SLF4JServiceProvider
文件, 文件内容为SLF4JServiceProvider
实现类的全类名. 编译时将这个文件一起打包到即可.
评论区