「造个轮子」——cicada 源码分析 (2)

由于所有的业务类都是实现了 WorkAction,所以在反射时都可以定义为 WorkAction 对象。

WorkAction action = (WorkAction) actionClazz.newInstance(); WorkRes execute = action.execute(paramMap);

最后将构建好的参数 map 传入即可。

响应返回

有了请求那自然也得有响应,观察刚才定义的 WorkAction 接口可以发现其实定义了一个 WorkRes 响应类。

所有的响应数据都需要封装到这个对象中。

「造个轮子」——cicada 源码分析

这个没啥好说的,都是一些基本数据。

最后在 responseMsg() 方法中将响应数据编码为 JSON 输出即可。

「造个轮子」——cicada 源码分析

拦截器设计

拦截器也是一个框架基本的功能,用处非常多。

cicada 的实现原理非常简单,就是在 WorkAction 接口执行业务逻辑之前调用一个方法、执行完毕之后调用另一个方法。

也是同样的思路需要定义一个接口 CicadaInterceptor,其中有两个方法。

「造个轮子」——cicada 源码分析

看方法名字自然也能看出具体作用。

「造个轮子」——cicada 源码分析

同时在这两个方法中执行具体的调用。

这里重点要看看 interceptorBefore 方法。

「造个轮子」——cicada 源码分析

其中也是加入了一个缓存,尽量的减少反射操作。

适配器

就这样的拦截器接口是够用了,但并不是所有的业务都需要实现两个接口。

因此也提供了一个适配器 AbstractCicadaInterceptorAdapter。

「造个轮子」——cicada 源码分析

它作为一个抽象类实现了 CicadaInterceptor 接口,这样后续的拦截业务也可继承该接口选择性的实现方法即可。

类似于这样:

「造个轮子」——cicada 源码分析

总结

v1.0.1 版本的 cicada 就介绍完毕了,其中的原理和源码都比较简单。

大量使用了反射和一些设计模式、多态等应用,这方面经验较少的朋友可以参考下。

同时也有很多不足;比如传参后续会考虑更加优雅的方式、拦截器目前写的比较死,后续会利用动态代理实现自定义拦截。

其实 cicada 只是利用周末两天时间做的,bug 肯定少不了;也欢迎大家在 GitHub 上提 issue 参与。

最后贴下项目地址:

https://github.com/TogetherOS/cicada

你的点赞与转发是最大的支持。

「造个轮子」——cicada 源码分析

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxgws.html