0
点赞
收藏
分享

微信扫一扫

xkernel微内核系统核心包

xkernel微内核系统工具

简介

背景

软件架构

软件架构说明


安装教程

引入微内核系统核心包

      <dependency>
    <groupId>com.javacoo</groupId>
    <artifactId>xKernel</artifactId>
    <version>1.0.0</version>
      </dependency>

使用说明

1,设计需要扩展的接口类,如:。

/**
 * 数据处理
 * <p>说明:</p>
 * <li></li>
 *
 * @Author DuanYong
 * @Since 2019/8/30 23:41
 * @Version 1.0
 */
public interface DataHandler<T> {
    /**
     * 处理
     * <p>说明:</p>
     * <li></li>
     * @Author DuanYong
     * @Since 2019/8/30 23:42
     * @Version 1.0
     * @Params data
     */
    void handle(final T data);
}

2,在接口上添加注解@Spi,如:

/**
 * 数据处理
 * <p>说明:</p>
 * <li></li>
 *
 * @Author DuanYong
 * @Since 2019/8/30 23:41
 * @Version 1.0
 */
@Spi("default")
public interface DataHandler<T> {
    /**
     * 处理
     * <p>说明:</p>
     * <li></li>
     * @Author DuanYong
     * @Since 2019/8/30 23:42
     * @Version 1.0
     * @Params data
     */
    void handle(final T data);
}

3,实现扩展接口类。

/**
 * 抽象数据处理类
 * <p>说明:</p>
 * <li></li>
 *
 * @Author DuanYong
 * @Since 2019/8/30 23:47
 * @Version 1.0
 */
@Slf4j
public abstract class AbstractDataHandler<T> implements DataHandler<String> {
    protected ExecutorService executorService = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(), Runtime.getRuntime().availableProcessors(),
            0L, TimeUnit.MILLISECONDS,
            new LinkedBlockingQueue<Runnable>(),Executors.defaultThreadFactory());
    @Override
    public final void handle(final String data){
        executorService.submit(()->{
            //解析
            T t = parser(data);
            if(null == t){
                return;
            }
            //执行处理
            doHandle(t);
        });
    }
    /**
     * 执行处理
     * <p>说明:</p>
     * <li></li>
     * @Author DuanYong
     * @Since 2019/8/30 23:57
     * @Version 1.0
     * @Params t
     */
    protected abstract void doHandle(T t);

    /**
     * 解析数据
     * <p>说明:</p>
     * <li></li>
     * @Author DuanYong
     * @Since 2019/8/30 23:55
     * @Version 1.0
     * @Params rawData 原始数据
     * @Return T
     */
    protected abstract T parser(String rawData);


}

4,在项目或jar包的META-INF/services/或者META-INF/ext或者META-INF/ext/internal目录下,创建一个文本文件:名称为接口的“全限定名”,内容格式为:实现名=实现类的全限定名。

文件:com.javacoo.swing.api.data.DataHandler
内容:default=com.javacoo.swing.core.data.AliPayDataHandler

5,使用ExtensionLoader.getExtensionLoader(接口类型)方法,获取对应接口类型的ExtensionLoader<接口类型> 实例对象。

 /**数据处理服务*/
    private DataHandler dataHandler;
    public MyNetworkDelegate(){
        dataHandler = ExtensionLoader.getExtensionLoader(DataHandler.class).getDefaultExtension();
    }

6,使用ExtensionLoader<接口类型> 实例对象,调用getExtension(扩展点名称)方法,获取对应扩展点名称的扩展实现。

项目信息
路漫漫其修远兮,吾将上下而求索
码云:https://gitee.com/javacoo
QQ:164863067
作者/微信:javacoo
邮箱:xihuady@126.com

源码下载地址

https://gitee.com/javacoo/xkernel

举报

相关推荐

0 条评论