# PluginFramework **Repository Path**: bian136/plugin-framework ## Basic Information - **Project Name**: PluginFramework - **Description**: 插件化框架 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-02-20 - **Last Updated**: 2021-03-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PluginFramework #### 介绍 ​ 插件化思想来自于多方面,比如MySQL逻辑架构、VUE的组件化开发、Android插件化框架等。 ​ MySQL的架构可以在多种不同场景中应用并发挥良好的作用,其主要体现在存储引擎的架构上,插件师的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离,它可以根据业务需求和实际需要选择合适的存储引擎;Vue更是将组件化玩到了极致,Vue就是由一个一个的组件构成的,比如页面级别的组件、业务上可复用的基础组件、与业务无关的独立组件等;Android插件化则是由于APP的功能模块越来越多,体积越来越大,这样可以将一些业务模块做成插件化,按需加载,从而减小安装包的体积。 #### 插件化解决的问题 ​ 目前互联网大型项目大多基于分布式微服务思想开发,在互联网区部署;但有很多中小型公司为特定的客户群体开发并长期维护一些软件,并在内网部署,不同的客户需要的模块功能可能略有差异,而如果将业务模块做成插件,则可针不同的客户主体进行按需加载,快速部署(初步设想通过接口部署);同时一个单独应用模块之间的耦合度高,协同开发沟通成本越来越大,所以可以开发独立的插件,最终由一个宿主和多个插件协同工作。 - 免部署,通过接口运行插件 - 加载不同的jar支持模块功能差异 - 功能便捷升级 - 插件出现Bug,便捷修复 - 热加载,项目不停机,插件安装即实现不同功能 - 代码安全,代码内部实现逻辑不能通过反编译破解 #### 插件化实现 1. 类加载:插件不是通过命令启动,如何让宿主加载并启动它,并让其和其它插件协同工作? 2. 插件依赖:A插件依赖B插件如何解决(Spring的三级缓存)? 3. 版本控制:插件升级、降级等如何解决(语义化版本控制SemVer)? 4. 插件监控:如何监控插件的加载及工作情况,各个插件的日志如何收集、展示? 5. 插件间调用:http OR rpc? 6. 启动参数:一个插件即一个jar,如何优化jvm指定jar的启动参数? ​ **可类比Spring框架,将一个插件(jar)看作一个bean,类加载前后是否可以使用xxxPostProcessor进行一些操作,插件依赖是否可以使用Spring中三级缓存解决,插件间调用是否可以类似于Feign等等。**