SPI 及其在 Springboot 中的使用

SPI (Service Provider Interface) 作为 Spring 系列一项至关重要的技术,在源码中有着众多的使用场景,对于我们自己编写各类 starter,也有很大的借鉴作用。下面我们将通过阅读源码的方式,带大家了解和运用 SPI 的相关技术。

1. 什么是 SPI

了解过 JDBC 的小伙伴都知道,Java 原本有一套自己的 SPI加载机制,例如通过加载 META-INF/services/ 下的各类数据库 Driver,能够在定义了一系列接口的情况下,屏蔽不同数据库的细节,以此实现代码不变,通过配置文件任意切换数据库的功能。
Spring 中的 SPI 其实也运用了相同的思想。通过定义接口规范,Spring 可以将需要的实现类全部载入并实例化。这一点在各类 spring 组件中运用十分广泛。

autoconfigure的配置
spring-boot-autoconfigure 包为例,在它的配置文件 META-INF/spring.factories 中,定义了一系列接口和实现类,在 spring 启动时,就能通过该配置文件,获取到所有在此定义的实现类的全限定名并实例化。

2. SPI 在 Springboot 的使用举例

下面我们以 springboot 启动流程中,第一个出现 SPI 的地方为例。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring BootSPI(Service Provider Interface)是一种机制,用于在应用程序动态加载和实例化服务提供者的实现类。SPI使用可以通过在配置文件定义接口和实现类的映射关系来实现。在Spring Boot,可以使用spring.factories文件来定义SPI的配置。 在Spring Boot,如果我们想要让SpiTestConfig加载,我们可以在resource目录下添加一个META-INF文件夹,并在其添加一个名为spring.factories的配置文件。在spring.factories文件,我们可以使用org.springframework.boot.autoconfigure.EnableAutoConfiguration键来指定要自动加载的配置类,例如config.SpiTestConfig。这样,当Spring Boot启动时,它会自动加载并实例化SpiTestConfig配置类。 举个例子,假设我们有一个名为SpiTestConfig的配置类,我们可以在spring.factories文件添加以下内容: ``` org.springframework.boot.autoconfigure.EnableAutoConfiguration=config.SpiTestConfig ``` 这样,当Spring Boot启动时,它会自动加载并初始化SpiTestConfig配置类,并执行其的逻辑。 总结起来,Spring BootSPI机制可以通过在配置文件定义接口和实现类的映射关系来实现动态加载和实例化服务提供者的实现类。在Spring Boot,我们可以使用spring.factories文件来定义SPI的配置,以实现自动加载和初始化配置类。 #### 引用[.reference_title] - *1* *2* [SpringBoot spi](https://blog.csdn.net/qq_42651904/article/details/116091149)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [SPI 及其在 Springboot 使用](https://blog.csdn.net/weixin_44512127/article/details/127977729)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值