zoukankan      html  css  js  c++  java
  • Java spi 和Spring spi

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

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

    1. 一个服务接口, 供服务提供者实现。
    2. 一个注册API, 系统使用这个API来注册服务接口的实现, 从而让客户端使用。
    3. 一个service access API, 客户端可以选择获取一个服务的实例。

    Java SPI:

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

    使用步骤:

    1. 服务调用方通过ServiceLoader.load加载服务接口的实现类实例
    2. 服务提供方实现服务接口后, 在自己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实现了ConverterRegistry接口, 提供服务实现的注册, 同时也提供可访问功能。

    FormattingConversionService 则实现了FormatterRegistry接口, 实现了formatter实现类的注册和调用。 同时FormattingConversionService也实现了ConversionService接口。

  • 相关阅读:
    Centos 7.0 下安装 Zabbix server 3.0服务器的安装及 监控主机的加入(1)
    Linux系统级别能够打开的文件句柄的数file-max命令
    记:cloudstack--gluster主存储上的一个文件损坏导致SSVM启动失败
    Linux 之 inotify+rsync 备份文件系统
    为什么KVM计算机点无故重启?
    vim批量在文件每行添加内容以及查询cloudstack模板是否是增量
    记-cloudstack 更改二级存储
    apache 自定义404错误页面
    URL路由
    前端图片优化
  • 原文地址:https://www.cnblogs.com/helloz/p/10961026.html
Copyright © 2011-2022 走看看