代码热部署之jarslink分析

什么是jarslink

jarslink是阿里的开源框架,可以用来使模块分离,对不同的模块的代码进行部署不会影响其他模块的代码的运行。可以避免各个模块依赖的包的冲突。他的代码比较简单并且清晰明了,我们可以学习他们的代码,然后稍作修改,就能运用到我们自己的项目中。

源码分析

首先,我们可以看到jarslink的代码并不多,并且有很多测试类,我们就从测试类入手,看看他的运行步骤


图片.png

可以分析一下下图这个测试类。他的大概逻辑就是组装一个ModuleConfig的对象,然后根据这个对象load出Module这个对象,Module就是当前模块的所有代码,然后从该模块里看是否有对应的action。那么重点就是 moduleLoader.load(config)这段代码了。


图片.png

这段代码的主要逻辑就是获取该模块对应的jar的文件路径,然后组装成sping的容器,再返回一个SpringModule对象。可以看到该对象有自己的上下文信息,还有对应的actions
图片.png

图片.png

图片.png

我们来看一下组装spring容器的代码,代码的逻辑就是new出来当前模块的classloader,然后切换当前线程的classloader,然后根据是注解还是xml方式,加载spring的上下文信息,并且设置一下父容器的信息,使得在当前模块中可以获取父容器的bean等信息。然后设置一下容器的classloader,刷新容器内容即可。


图片.png

正因为各自的模块有各自的上下文信息,自己的classloader,所以使得模块间互相隔离,各自不会互相影响。jarslink的代码量很少,上述讲到的几个类与方法就是核心。如果我们需要有自己的定制化需求,完全可以依据他的逻辑,重写一份自己的代码热部署功能。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容