SPI机制的一次具体使用

来源:互联网 发布:时间序列数据集 编辑:程序博客网 时间:2024/06/17 07:29

对spi机制的使用在一次对schemacrawler(一个数据库元数据爬虫框架)的使用中提升了很多。
基础了解:http://blog.csdn.net/qq_33793432/article/details/73112302

具体的使用:
我使用spi机制来调用不同数据库实现的分页方法。通过一个数据库类型来查找对应的实现类。

  1. 对外的接口或抽象类A
    你可以在A中定义实现的大体框架。
    这里写图片描述
    可以看到这个对外的抽象类接口中要求实现类必须提供的东西,其中对我最主要的还是那个接口IProduceSql , 它定义了产生sql语句的方法,要求实现类必须实现。

  2. 扫描实现类
    在自己的程序中还要对所有的实现类进行扫描注册
    这里写图片描述
    还是通过使用ServiceLoader 来扫描实现类。这里我使用一个集合装入我所有的实现。
    我的使用场景是,所有的实现类都提供了一个类型格式,我把类型格式为key,对应的实现类为value放入一个map中。
    在具体的使用时,根据url格式的不同就可以调用不同的实现类。

  3. 如何利用spi机制实现暴露的接口或抽象类
    举例我的mysql实现,这是另外一个项目:
    这里写图片描述
    我继承了对外的抽象类,提供了主要的MysqlProduceSqlImpl实现类。

    那么如何让它知道我实现了呢。
    这里写图片描述

    在根目录下新建 META-INF/services目录
    新建对外暴露的类A全路径在里面写入自己实现类的全路径

在主程序中引用这个mysql子项目。ServiceLoader就可以扫描到。

原创粉丝点击