侧边栏壁纸
  • 累计撰写 19 篇文章
  • 累计创建 22 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

Java SPI机制与Slf4j日志门面

Yttrium
2023-02-03 / 0 评论 / 0 点赞 / 62 阅读 / 972 字

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实现类的全类名. 编译时将这个文件一起打包到即可.

0

评论区