为了方便用户在使用时候可以随意的读取各个配置文件,所以还需要将反射创建的对象保存到一个内部缓存中,核心代码就是上上图中的这段代码:
// add configuration cache ConfigurationHolder.addConfiguration(aClass.getName(), conf);其中 ConfigurationHolder 的定义如下。
其实也是利用一个 Map 来存放这些对象。
这样在使用时候只需要取出即可。
KafkaConfiguration configuration = (KafkaConfiguration) getConfiguration(KafkaConfiguration.class); String brokerList = configuration.get("kafka.broker.list"); 重构本次升级同时还重构了部分代码,比如启动类。
现在看上去要清爽和直接的多:
其中也有一点需要注意的地方。
大家如果查看日志的话会发现应用启动之后会打印本次的耗时,自然就是在启动时候记录一个时间,初始化完毕之后记录一个即可。
在之前的实现中由于都是在一个方法内,所以直接使用就行了。
但现在优化之后跨越了不同的方法和类,难道要把时间作为参数在各个方法之前传递嘛?
那未免太不优雅了。
所以 ThreadLocal 就有了发挥余地。
在初始化的方法中我将当前时间写入:
ThreadLocalHolder.setLocalTime(System.currentTimeMillis());在最后记录日志的地方直接取出比较即可:
这样使用起来就完全不需要管什么参数传递了。
同时 ThreadLocalHolder 的定义:
这里还是有一点需要注意,在这种长生命周期的容器中一定得要记得及时清除。
我这里的时间在查询一次之后就不用了,所以完全放心的在 getLocalTime() 方法中删掉。
总结这就是本次 v1.0.2 中的升级内容,包含了配置支持以及代码重构。其中有些内容我觉得对接触少的同学来说还是挺有帮助的。
关于上两次的版本介绍请查看这里:
「造个轮子」——cicada(轻量级 WEB 框架)
「造个轮子」——cicada 源码分析
还没点关注的朋友可以点波关注:
https://github.com/TogetherOS/cicada
也欢迎大家参与一起维护!。