SPI(服务提供商界面)是JDK的内置服务发现机制。它可用于启用框架扩展和更换组件。它主要由框架的开发人员使用。例如,java.sql.driver界面可以针对同一接口的实现,MySQL和PostgreSQL与用户具有不同的实现,Java的SPI机制可以找到某个界面的服务。SPI机制的主要思想。在Java中,将对组件的控制移至程序。这种机制在模块化设计中尤为重要。核心想法是决定。
SPI的总体机理图如下:
当服务提供商提供接口实现时,有必要创建一个以ClassPath下的目录下的服务接口命名的文件。该文件中的内容是该接口的特定实现类。当其他程序需要此服务时,您可以在此JAR软件包中找到配置文件(通常是JAR软件包)。如果您加载实例化,则可以使用该服务。工具。在JDK中找到服务实现的课程是:。
在JDBC4.0之前,当我们开发数据库时,我们通常使用class.forname(“ com.mysql.jdbc.driver”)。在JDBC4.0之后,您无需使用class.forname(com.mysql.jdbc.Driver“)加载驱动程序并直接获得连接。现在,该方法是实现Java SPI扩展机制的使用。
首先,界面是在Java中定义的,并且没有具体的实现。具体的实施是由不同制造商提供的。
在MySQL的JAR软件包中,您可以找到目录。在此目录中,将有一个带有名称的文件。该文件的内容是其内容是Java中定义的接口的实现。
同样在PostgreSQL的JAR包中,也可以找到相同的配置文件。文件的内容是,这是将PostgreSQL实现为Java。
如上所述,现在使用SPI扩展来加载特定的驱动程序。当我们编写连接Java数据库的代码时,我们无需使用它来加载驱动程序。相反,以下代码直接使用:
现在,我们需要使用内容搜索界面。搜索的实现可能基于文件系统,也可以是基于数据库的搜索。
您可以看到输出结果:文件搜索Hello WorldD
如果将两个实现类写在文件中,则最终输出结果是两行。
这是因为在加载特定接口时,您将下去找到接口的完整名称文件,然后根据内部内容加载相应的实现类。
这是SPI的想法。界面的实现由提供商实施。提供商仅根据已提交的JAR软件包中定义的接口使用新文件,并添加相应的实现类内容。
如果重印,请指示来源:开源字节https://sourcebyte.cn/article/137.html
原始:https://juejin.cn/post/710267984948706909