定义一个接口,如何优雅的根据一个接口来获取该接口的实现类呢?
以 Site 国际化为例,一般是各个国家有各个国家的 Service,各个国际的 Service 由各个国家的 team 维护,那在统一框架下,如何实现获取动态服务,由此 SPI 引入眼帘。
![c95bd355b56ef99c5b2cabd1814a39ab.png](https://i-blog.csdnimg.cn/blog_migrate/5caa39f5d9769d18fd0c193a4a966b1a.jpeg)
SPI - Service Provider Interface
SPI 全称为(Service Provider Interface),是 JDK 内置的一种服务提供发现机制,它是一种动态替换发现服务实现者的机制。简单地理解,这是建立在面向接口编程下的一种为了使组件可扩展或动态变更实现的规范。
![v2-93b5bf0b80ae99ea164943c0fd1932e8_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=230a44e1-d633-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-93b5bf0b80ae99ea164943c0fd1932e8_b.jpg)
常见的类 SPI 的设计有 JDBC、JNDI、JAXP 等,很多开源框架的内部实现也采用了 SPI。
1、在 mysql-connector-java-xxx.ja