jarslink源码分析
文章平均质量分 50
jarslink源码分析
bigdogLIU
这个作者很懒,什么都没留下…
展开
-
Jarslink简介
JarsLink是一个基于JAVA的模块化开发框架,它提供在运行时动态加载模块(JAR包)、卸载模块和模块间调用的API。需求背景应用拆分的多或少都有问题。多则维护成本高,每次发布一堆应用。少则拆分成本高,无用功能很难下线。 故障不隔离。当一个系统由多人同时参与开发时,修改A功能,可能会影响B功能,引发故障。 多分支开发引发冲突。多分支开发完之后合并会产生冲突。 牵一发动全身。一处核心代码的改动,或一个基础Jar的升级需要回归整个系统。 升级和迁移成本高。中间件升级每个应用都有升级成本。模原创 2020-12-19 23:16:47 · 1169 阅读 · 1 评论 -
Jarslink之基础学习
在了解jarslink之前,我先介绍一下学习jarslink源码所需要的一些基本知识。一:Java的类加载过程加载:类加载过程的一个阶段:通过一个类的完全限定查找此类字节码文件,并利用字节码文件创建一个Class对象 验证:目的在于确保Class文件的字节流中包含信息符合当前虚拟机要求,不会危害虚拟机自身安全。主要包括四种验证,文件格式验证,元数据验证,字节码验证,符号引用验证。 准备:为类变量(即static修饰的字段变量)分配内存并且设置该类变量的初始值即0(如static int i.原创 2021-01-07 07:48:09 · 266 阅读 · 0 评论 -
Jarslink源码解析-----SpringModule
前面几节科普了阅读jarslink需要的一些背景知识,接下来我们来看一下它的源码。包结构其中,modulemanager和moduleservice仅是提供了管理module的接口,这里就不做解析了,重点看一下SpringModule、ModuleLoaderImpl以及ModuleClassLoader这三个类,我们从最基础的SpringModule说起。SpringModule主要有以下几个功能:提供模块基础信息 扫描定义好的Action 提供Action的执行方法 提供模块的原创 2021-01-08 08:08:53 · 347 阅读 · 0 评论 -
Jarslink源码解析-----ModuleClassLoader
ModuleClassLoader是jarslink自定义的类加载器,继承自URLClassLoader,同时可以强制指定一些包下的class,由本ClassLoader自己加载,不通过父ClassLoader加载,突破双亲委派机制。上面这句话是源码中作者为我们说明的,接下来我将借助源码及之前博客中的知识说明一下这个类主要涉及的点。我们可以从代码中看到,ModuleClassLoader继承自URLClassLoader,该类也是系统类加载器和扩展类加载器的父类(此处是父类,而不是父类加载器,这原创 2021-01-13 22:52:46 · 504 阅读 · 1 评论 -
Jarslink源码解析-----ModuleLoaderImpl
moduleLoader实际上就是模块的“加载器”我们从load方法开始public Module load(ModuleConfig moduleConfig) { if (LOGGER.isInfoEnabled()) { LOGGER.info("Loading module: {}", moduleConfig); } List<String> tempFileJarURLs = moduleConfig.原创 2021-01-13 22:24:14 · 1030 阅读 · 3 评论 -
Jarslink源码解析-----抽象化的“Action”
最后我们来说一下我个人理解的JArslink的设计精髓-----“Action”首先我们来看一下,SpringModule中的一段代码private <T> Map<String, T> scanActions(ApplicationContext applicationContext, Class<T> type, Function<T, String> keyF原创 2021-01-14 09:33:38 · 222 阅读 · 0 评论 -
Jarslink应用示例-----注解方式
我们可以从下面的代码中看到Jarslink扫描Action是从已经加载的ApplicationContext中获取指定的bean中加载,我们可以通过我们的自定义注解的方式加在每个模块需要通信的类上面实现分发请求的功能。/*** 请求类注解*/@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic @interface ActionClass { Strin原创 2021-01-14 23:13:25 · 330 阅读 · 0 评论 -
Jarslink应用示例-----XML方式
XML方式适用于没有大量使用spring来管理bean的模块,我们可以通过手动在模块中建立对应的xml文件来初始化对应模块的上下文获取该bean,实现方式如下:public interface IBaseCom { /** * 打开回调方法 */ public int open(String param); /** * 卸载回调方法 */ public int close( ); /** * 接收消息 */ public i原创 2021-01-14 23:30:23 · 215 阅读 · 0 评论