在面向对象的程序设计中,模块之间交互采用接口编程,通常情况下调用方不需要知道被调用方的内部实现细节,因为一旦涉及到了具体实现,如果需要换一种实现就需要修改代码,这违反了程序设计的"开闭原则"。所以我们一般有两种选择:一种是使用API(Application Programming Interface),另一种是SPI(Service Provider Interface),API通常被应用程序开发人员使用,而SPI通常被框架扩展人员使用。
创新互联建站专业为企业提供北海网站建设、北海做网站、北海网站设计、北海网站制作等企业网站建设、网页设计与制作、北海企业网站模板建站服务,10多年北海做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
在进入下面学习之前,我们先来再加深一下API和SPI这两个的印象:
API:由实现方制定接口标准并完成对接口的不同实现,这种模式服务接口从概念上更接近于实现方;
SPI:由调用方制定接口标准,实现方来针对接口提供不同的实现;从前半句话我们来看,SPI其实就是"为接口查找实现"的一种服务发现机制;这种模式,服务接口组织上位于调用方所在的包中,实现位于独立的包中。
API和SPI简略图示:
看完上面的简单图示,相信大家对API和SPI的区别有了一个大致的了解,现在我们使用SPI机制来实现我们一个简单的日志框架:
第一步,创建一个maven项目命名为spi-interface,定义一个SPI对外服务接口,用来后续提供给调用者使用;
package cn.com.wwh; /** * * @FileName Logger.java *@version:1.0 * @Description: 服务提供者接口 *@author: wwh * @date: 2022年9月19日 上午10:31:53 */ public interface Logger { /** * * @Description:(功能描述) *@param msg */ public void info(String msg); /** * * @Description:(功能描述) *@param msg */ public void debug(String msg); }
分享题目:Java中的SPI原理浅谈
网页路径:http://scpingwu.com/article/dscgigd.html