# easy-extension **Repository Path**: wangruchao/easy-extension ## Basic Information - **Project Name**: easy-extension - **Description**: No description available - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: feature/zs - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-03 - **Last Updated**: 2025-03-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Easy-Extension Easy-Extension框架主要解决`复杂系统的扩展性问题`,系统提供`扩展点`,业务进行`个性化实现`,从而达到系统通用流程和业务特殊逻辑解耦的目的。 框架适用于有多接入方,且不同接入方有复杂定制化的扩展诉求场景,例如电商交易,履约等中台系统。 ## ✨ v3 新特性 * 支持通过注解@Ability、@Business方式定义能力和业务 * 支持一次请求命中多业务场景 * 提供可视化[管理后台](#-管理后台),方便管理扩展点、能力及业务 * v2、v3能力和业务定义简单对比,v3更简洁灵活 | 框架版本 | v2 & v3 API对比 | |--------|----------------------------------------------------------| | 能力定义对比 | 对比图 | | 业务定义对比 | 对比图> | ## 🖇️ 整体架构 架构图 ## ⭐️ 核心概念 * 扩展点: 扩展点是系统提供的扩展能力,本质就是一个接口,业务方通过自定义实现进行扩展。 * 能力: 能力是一组扩展点的实现,是系统提供的通用产品能力,业务可以通过挂载能力来继承能力的扩展点实现。 * 业务: 业务即系统接入方,可以通过挂载能力来继承能力的扩展点实现,也可以对扩展点进行自定义实现。 ## 🌈 快速开始 完整样例请参考: [easy-extension-sample](https://github.com/xiaoshicae/easy-extension-sample) * 第一步: 引入依赖 ```xml io.github.xiaoshicae easy-extension-spring-boot-starter 3.1.1 ``` * 第二步: 定义扩展点,能力及业务 ```java // 扩展点1 @ExtensionPoint public interface Ext1 { String doSomething1(); } // 能力X @Ability(code = "app.ability.x") public class AbilityX implements Ext1 { public String doSomething1() { return "AbilityX doSomething1"; } } // 业务A 挂载了能力("app.ability.x" 即能力X) @Business(code = "xxx.biz.a", abilities = {"app.ability.x"}) public class BusinessA implements Ext1 { public String doSomething1() { return "BusinessA doSomething1"; } } ``` * 第三步: 注入并使用扩展点 ```java @RestController @RequestMapping("/api") public class Controller { /** * 系统提供的扩展点1 * 注解@ExtensionInject会注入扩展点1的动态代理 * 运行时会根据匹配到的业务及使用的能力,选择有最高优先级的生效的扩展点实现 * 如果业务及使用的能力都没有实现该扩展点,则会走默认实现进行兜底 */ @ExtensionInject private Ext1 ext1; /** * 系统提供的扩展点2 */ @ExtensionInject private Ext2 ext2; /** * 系统提供的扩展点3 * 注解@ExtensionInject会注入List的动态代理,包含所有生效的实现 * 运行时会根据匹配到的业务及使用的能力,按照优先级依次包含生效的扩展实现 * List当然也包含扩展点的默认实现 */ @ExtensionInject private List ext3List; @RequestMapping("/process") public String process() { String s1 = ext1.doSomething1(); // 执行扩展点1,具体用哪个实现,由匹配到的业务及生效的能力+优先级决定 String s2 = ext2.doSomething2(); // 执行扩展点2,具体用哪个实现,由匹配到的业务及生效的能力+优先级决定 List s3List = new ArrayList<>(); for (Ext3 ext3 : ext3List) { s3List.add(ext3.doSomething3()); // 按优先级从高到低,依次执行扩展点3的业务或生效能力的实现 } return String.format("res: ext1 = %s, ext2 = %s, ext3List = %s", s1, s2, Arrays.toString(s3List.toArray())); } } ``` ## 🖥 管理后台 * 在线体验地址: https://www.xlemon.site/easy-extension-admin * 接入步骤: * 引入依赖 ```xml io.github.xiaoshicae easy-extension-admin-spring-boot-starter 3.1.1 ``` * 默认访问的url: /easy-extension-admin * 管理后台提供的能力: * 提供扩展点,能力和业务的可视化能力 ![](/doc/admin-extension.png) * 提供了扩展点冲突检测能力 (业务及能力可能实现了相同的扩展点,可能存在冲突。发生冲突时,会选择优先级最高的实现) ![](/doc/admin-business-conflict.png) ## 📖 文档 框架设计及详细使用文档请参考: [wiki](https://github.com/xiaoshicae/easy-extension/wiki) ## 🌐 语言 Go版本的easy-extension可以参考: [go-easy-extension](https://github.com/xiaoshicae/go-easy-extension) ## ⚠️ License Easy-Extension遵循Apache开源协议,具体内容请参考LICENSE文件。