欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java spi机制(开发类似mysql的sql解析和运算工具)

程序员文章站 2022-04-15 18:38:51
Java spi机制前言简介使用场景spi例子前言最近公司做了一款数据处理工具,需要支持类似于mysql一样的sql解析/运算,且要求易扩展。于是使用了spi机制,通过spi机制可以在业务存在添加新算子(运算函数)的情况下可以不用改动原来项目的代码也不用重新编译,以增量插件的方式便可以将新算子(运算函数)发布到项目中去。简介SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。 SPI的作用就是为这些被扩...



前言

最近公司做了一款数据处理工具,需要支持类似于mysql一样的sql解析/运算,且要求易扩展。于是使用了spi机制,通过spi机制可以在业务存在添加新算子(运算函数)的情况下可以不用改动原来项目的代码也不用重新编译,以增量插件的方式便可以将新算子(运算函数)发布到项目中去。

简介

SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。 SPI的作用就是为这些被扩展的API寻找服务实现。主要思想就是“解耦”。

Java spi机制(开发类似mysql的sql解析和运算工具)

使用场景

适用于:调用者根据实际使用需要,启用、扩展、或者替换框架的实现策略。不需要改动源码就可以实现扩展,解耦;实现扩展对原来的代码几乎没有侵入性;只需要添加配置就可以实现扩展,符合开闭原则。
我们先说说效果,如sql:select sum(amount) from order处理工具已经写好sum函数逻辑并且已经发布到生产目录,现在需要新添加一个count()的函数功能。
这是我的生产项目目录:
Java spi机制(开发类似mysql的sql解析和运算工具)
现在我只需要新建一个普通的java项目,里面创建两个文件,实现一个接口便可以将该项目打包好的jar包放入lib目录。
Java spi机制(开发类似mysql的sql解析和运算工具)
重启项目,count函数便可以在sql中正常使用了。

spi例子

先定义一个接口:

package com.example.service;

import java.util.List;

/**
 * @author hehai
 * @Date 2020/7/7
 * @REMARK:
 */
public interface EvaluateService {

    List<String> evaluat(String value);

} 

实现接口:

package com.example.service.impl;

import com.example.service.EvaluateService;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author hehai
 * @Date 2020/7/7
 * @REMARK:
 */
public class EvaluateServiceImpl implements EvaluateService {
    @Override
    public List<String> evaluat(String value) {
        System.out.println("我是测试spi:" + value);
        return null;
    }
} 

然后需要在resources目录下新建META-INF/services目录,并且在这个目录下新建一个与上述接口的全限定名一致的文件,在这个文件中写入接口的实现类的全限定名:
Java spi机制(开发类似mysql的sql解析和运算工具)
通过serviceLoader加载实现类:
Java spi机制(开发类似mysql的sql解析和运算工具)

本文地址:https://blog.csdn.net/qq_31247885/article/details/108035276

相关标签: java SPI