美文网首页BATJ架构
Java spi 和Spring spi

Java spi 和Spring spi

作者: 裘马轻狂大帅 | 来源:发表于2020-07-04 00:34 被阅读0次

Java spi 和Spring spi

service provider framework是一个系统, 实现了SPI, 在系统里多个服务提供者模块可以提供一个服务的实现, 系统让客户端可以使用这些实现, 从而实现解耦。

一个service provider framework有3个主要的组成部分:

一个服务接口, 供服务提供者实现。

一个注册API, 系统使用这个API来注册服务接口的实现, 从而让客户端使用。

一个service access API, 客户端可以选择获取一个服务的实例。

Java SPI:

Service Provider Interface(SPI)是一个可以被第三方扩展或实现的API, 它可以用来实现框架扩展和可替换的模块。

使用步骤:

服务调用方通过ServiceLoader.load加载服务接口的实现类实例

服务提供方实现服务接口后, 在自己Jar包的META-INF/services目录下新建一个接口名全名的文件, 并将具体实现类全名写入。

Spring SPI

很多开源库中都直接或间接地使用了Java的SPI机制, 如Spring中就有类似的SPI机制, 通过SpringFactoriesLoader代替JDK中的ServiceLoader, 通过META-INF/spring.factories文件代替META-INF/service目录下的描述文件, 原理都是使用了Java的反射机制。

Spring提供的SPI只需要且只有一个文件, 就是META-INF/spring.factories

Spring的SPi也更加灵活, 不必要key是接口, 值是实现类, 例如Spring boot使用这种方式来处理自动配置的bean: key是注解(如org.springframework.boot.autoconfig.EnableAutoConfiguration), 值是被标记@Configuration的类。

另外Spring中还有converter spi和formatter spi。

converter可以用做任意两个类型之间的转换, formatter spi用做string类型和其他类型之间的转换。

Converter和Formatter接口即服务接口

ConersionService实现了Conve

相关文章

  • Java spi 和Spring spi

    Java spi 和Spring spi service provider framework是一个系统, 实现了...

  • dubbo的spi机制

    SPI SPI是一种扩展机制,在java中SPI机制被广泛应用,比如Spring中的SpringServletCo...

  • Java - SPI机制

    Java - SPI机制 SPI是什么 SPI全称Service Provider Interface,是Java...

  • dubbo 源码分析 -SPI

    dubbo 中大量使用SPI,在看源码之前必须先了解dubbo的SPI 1、Java原生spi java原生spi...

  • Java SPI 机制解析

    本文以JDBC为例深入讲解 java spi 机制,将帮助你理解:什么是SPI,SPI实现原理,SPI的使用和SP...

  • spi

    java中有一些包结尾为spi,如java.nio.channels.spi spi - service prov...

  • dubbo的内核剖析

    SPI机制 Java SPI SPI(service provider interface),在运行时,动态加载接...

  • dubbo SpiExtensionFactory的设计初衷

    1.扩展未知类分为:spi 和spring spi的扩展对象存储在SpiExtensionFactory spri...

  • SPI实现接口多实现路由

    SPI简介 SPI是Service Provider Interfaces的简称。根据Java的SPI规范,我们可...

  • 4.Dubbo的SPI扩展点加载机制

    4.1 加载机制概述 4.1.1 Java SPI 在讲Dubbo SPI之前,先来了解一下Java SPI,SP...

网友评论

    本文标题:Java spi 和Spring spi

    本文链接:https://www.haomeiwen.com/subject/kxryqktx.html