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