Java SPI 服务机制

SPI:Service Provider Interface,目的是提供接口,让第三方(服务厂商或扩展框架开发者)提供自定义实现的服务功能。例如,JDBC驱动,可以加载MySQL、Oracle、或者SQL Server等。

SPI约定:

1、在工程的META-INF/services/目录下,以接口的全限定名作为文件名,文件内容为实现接口的服务类;

2、使用ServiceLoader动态加载META-INF/services下的实现类;

3、接口的实现类需含无参构造函数;

SPI 问题考虑

1、如果在META-INF/services下有接口实现类,存在多个(例如jar包下面也有相应),系统如何处理?

答:会全部加载,ServiceLoader在加载资源文件时,已经考虑了这个问题。

2、SPI,和Dubbo等相比,区别在哪里?

答:SPI的目的是提供给各种不同服务相同的访问接口。而Dubbo等微服务是将服务拆分形成功能相对独立的、维护性强的服务。两者出发点并不一致。

你可能感兴趣的:(Java SPI 服务机制)