早晨上班在地跌里看到“阿里技术”公众号显示的“基于Java的模块化开发框架JarsLink”, 感觉很屌的样子,上午就迫不及待的看了源码。
JarsLink顾名思义是动态加载jar包, 跟阿里Dubbo的区别在于JarsLink依赖于宿主进程执行, Dubbo调用者/被调用者是多进程运行。
JarsLink的厉害之处在动态加载jar、还能卸载jar, 同样是Java语言,Android似乎不能动态卸载jar。
动态加载jar的核心是实例化一个上下文和ClassLoader, 从而实现类隔离。
ClassLoader默认逻辑是双亲委托, 即同一个类只能被加载一次, JarsLink覆盖了这个逻辑从而能多次加载同一个类;
动态卸载jar就是关闭资源、关闭上下文、下载类加载器。(PS:Android能动态卸载吗? 貌似不行)
JarsLink是通过定时器扫描module版本变化来卸载老jar、状态新jar, 定时器(用线程池实现)默认60秒判断当前加载的jar是否需要更新。
小结: JarsLink依赖于Springframework, 通过实例化上下文和ClassLoader实现动态加载、卸载jar/类的功能; Android还没有动态卸载jar或类的功能。