kaka是一款服务于java后端的事件领域模型框架,主要目的为解耦业务、 简化程序复杂性、提高代码可读性和降低开发维护成本。
本次更新内容如下:
- aop删除不必要的Class及其相关类名、包名的映射缓存,增加运行时动态Aop能力。
- 将Facade中包含regist文本的方法,全部更改为register;优化Facade中Mediator注册。
- Facade实例获取由原来的单例改为工厂模式,可继承Facade自定义Queue实现或者Quatrz(或其它)的定时调度。
QuartzFacade facade = FacadeFactory.config(QuartzFacade.class); //注册自定义Facade子类,全局注册一次
//后面任何地方可使用如下语句获得Facade对象进行事件分发
QuartzFacade facade = FacadeFactory.getFacade();
//QuartzFacade 在本框架中未做具体实现,仅作为参考范例
- 额外增加基于Excel数值配置表(预先转换为制表符分割单元格的纯文本,也可自定义格式并做相应实现)的解析处理功能
//TextNumericConfig为抽象类,主要有如下抽象方法:
// String initDelimiter() 初始化单元格数据的分割符
// void cacheObject(T info) 缓存一行数值数据 T
// void parseBefore() 解析前的处理
// void parseAfter() 解析后的处理
//范例如下:
/**
* 自定义数值数据管理器,每行数据将自动转换为ConfPlaceInfo对象。
*/
@Numeric(src = "conf_place.txt")
public class ConfPlaceInfoManager extends TextNumericConfig<ConfPlaceInfo> {
private final Map<Integer, ConfPlaceInfo> map = new ConcurrentHashMap<>();
private final List<ConfPlaceInfo> list = new CopyOnWriteArrayList<>();
@Override
protected String initDelimiter() {
return "\t";
}
@Override
protected void cacheObject(ConfPlaceInfo info) {
if (info.getMaxGold() < 0) {
info.setMaxGold(Integer.MAX_VALUE);
}
map.put(info.getId(), info);
list.add(info);
}
@Override
protected void parseBefore() {
map.clear();
list.clear();
}
@Override
protected void parseAfter() {
}
public ConfPlaceInfo getConfPlaceInfo(int id) {
if (id <= 0) id = 1;
return this.map.get(id);
}
}
TextNumericConfig numericConfig = facade.retrieveProxy(file.getName()); //fileName为Numeric注解配置的src参数
numericConfig.parse(is, "UTF-8", 1); //is为数值配置文件输入流
参考消息:https://gitee.com/zkpursuit/kaka-notice-lib