• JAVA中SPI机制


    之前研究dubbo的时候就很好奇,里面各种扩展机制,期间也看过很多关于SPI的机制,今日有缘再度看到有文章总结,故记录一下,

    首先了解一下 JAVA中SPI简单的用法

    可参考这篇文章,https://mp.weixin.qq.com/s/vpy5DJ-hhn0iOyp747oL5A

    应用场景

    SPI扩展机制应用场景有很多,比如Common-Logging,JDBC,Dubbo等等。

    SPI流程:

    1. 有关组织和公式定义接口标准 

    2. 第三方提供具体实现: 实现具体方法, 配置 META-INF/services/${interface_name} 文件 

    3. 开发者使用

    比如JDBC场景下:

    • 首先在Java中定义了接口java.sql.Driver,并没有具体的实现,具体的实现都是由不同厂商提供。

    • 在MySQL的jar包mysql-connector-java-6.0.6.jar中,可以找到META-INF/services目录,该目录下会有一个名字为java.sql.Driver的文件,文件内容是com.mysql.cj.jdbc.Driver,这里面的内容就是针对Java中定义的接口的实现。

    • 同样在PostgreSQL的jar包PostgreSQL-42.0.0.jar中,也可以找到同样的配置文件,文件内容是org.postgresql.Driver,这是PostgreSQL对Java的java.sql.Driver的实现。

    不足

    1.不能按需加载,需要遍历所有的实现,并实例化,然后在循环中才能找到我们需要的实现。如果不想用某些实现类,或者某些类实例化很耗时,它也被载入并实例化了,这就造成了浪费。

    2.获取某个实现类的方式不够灵活,只能通过 Iterator 形式获取,不能根据某个参数来获取对应的实现类。

    3.多个并发多线程使用 ServiceLoader 类的实例是不安全的。

    如何规避,

    针对以上的不足点,我们在SPI机制选择时,可以考虑使用dubbo实现的SPI机制。

    具体参考: 

    http://dubbo.apache.org/zh-cn/blog/introduction-to-dubbo-spi.html

    人生在勤,不索何获,坚持自有收获
  • 相关阅读:
    HTML导航条的制作
    图片样式加hover特效
    用表格制作商品购买页面--(table)
    CSS-盒子模型
    一些常见css样式加选择器
    css的一些样式
    HTML基本代码
    element-ui的tab切换同步步骤条 字符串转数字 数字转字符串
    vuex相关知识笔记
    js: 数组方法(中级)
  • 原文地址:https://www.cnblogs.com/quyf/p/11531531.html
Copyright © 2020-2023  润新知