cola4.0 扩展点使用及源码浅析

最近新项目里面用了cola框架,里面有一个扩展点,特定去撸了一下它的源码,把它整明白了

Cola扩展点使用

Cola中提供了一种扩展点的机制,允许我们通过bizId(组织ID)、useCase(使用案例)、scenario(业务场景)三者动态的去选择实现类。有点类似与我们的策略模式,在程序运行的过程中,动态的选择实现类去处理我们的请求。

我就不多做解释了,下面的例子看了,就能明白这个扩展点怎么用了。

1、定义扩展点接口,实现ExtensionPointI

public interface OrganizationExtPt extends ExtensionPointI {
    /**
     * 根据corpId查询企业下所有部门
     *
     * @return 部门
     */
    String getDepartmentsByCorpId();
}

2、钉钉场景扩展点实现

@Extension(bizId = "organize",useCase = "getByCorpId",scenario = "dingTalk")
public class DingTalkOrganizationExt implements OrganizationExtPt {

    @Override
    public String getDepartmentsByCorpId() {
        System.out.println("在组织结构业务,通过企业编号获取部门列表的用例,在钉钉的场景下业务的实现处理方式");
        System.out.println("通过钉钉的配置信息和API获取得到组织信息,并组装成云枢识别的部门信息");

        return "钉钉";
    }
}

3、微信扩展点接口实现

@Extension(bizId = "organize",useCase = "getByCorpId",scenario = "wechat")
@Slf4j
public class WechatOrganizationExt implements OrganizationExtPt{
    public String getDepartmentsByCorpId() {
        log.info("业务:组织机构,用例:通过企业编号获取部门 , 场景:企业微信");
        log.info("通过企业微信的API获取组织的部门信息,然后包装为需要的部门列表");

        return "微信";
    }
}

4、扩展点使用
在命令执行器中使用。

@Component
public class OrgazationQueryExe {
    @Resource
    private ExtensionExecutor extensionExecutor;

    public String execute(OrgnizationQry cmd) {
        return extensionExecutor.execute(OrganizationExtPt.class, cmd.getBizScenario(),
                ex -> ex.getDepartmentsByCorpId());
    }
}

5、测试扩展点的使用

@RestController
public class OrganizationController {

    @Resource
    private OrgazationQueryExe orgazationQueryExe;

    @GetMapping(value = "/organization/getDepartmentsByCorpId/{corpId}/{scenario}")
    public String listCustomerByName(@PathVariable("corpId") String corpId, @PathVariable("scenario") String scenario){

        OrgnizationQry qry = new OrgnizationQry();
        qry.setCorpId(corpId);
        qry.setIncludeDelete(true);
        qry.setBizScenario(BizScenario.valueOf("organize","getByCorpId",scenario));

        return orgazationQueryExe.execute(qry);
    }
}

在这里插入图片描述
可以看到,根据我们参数的不同,最终处理的实现类也不同。

扩展点原理探究

第一次使用Cola扩展点后,我就在想,它是怎么找到具体的实现的?而在我们上面的代码实例中,唯一的入口就是下面这段代码:

 extensionExecutor.execute(OrganizationExtPt.class, cmd.getBizScenario(),
                ex -> ex.getDepartmentsByCorpId());

因此,跟进去看看源代码是怎么实现的。

public <R, T> R execute(Class<T> targetClz, BizScenario bizScenario, Function<T, R> exeFunction) {
        // 1.找到负责执行的具体实现类
        T component = locateComponent(targetClz, bizScenario);
        // 2.执行
        return exeFunction.apply(component);
    }

继续往下跟的话,发现实现类是从extensionRepository 中获取的。所以,升起了第二个疑问:实现类是什么时候被放到extensionRepository中去的?

这时候,利用IDEA定位到cola有关扩展点源码的位置:
在这里插入图片描述
根据SpringBoot自动配置的机制,我们知道ExtensionAutoConfiguration 会被Spring初始化,因此这是我们进一步探究源码的入口。

@Configuration
public class ExtensionAutoConfiguration {

    @Bean(initMethod = "init")
    @ConditionalOnMissingBean(ExtensionBootstrap.class)
    public ExtensionBootstrap bootstrap() {
        return new ExtensionBootstrap();
    }

    @Bean
    @ConditionalOnMissingBean(ExtensionRepository.class)
    public ExtensionRepository repository() {
        return new ExtensionRepository();
    }

    @Bean
    @ConditionalOnMissingBean(ExtensionExecutor.class)
    public ExtensionExecutor executor() {
        return new ExtensionExecutor();
    }

    @Bean
    @ConditionalOnMissingBean(ExtensionRegister.class)
    public ExtensionRegister register() {
        return new ExtensionRegister();
    }
}

我看名字猜了一下,ExtensionBootstrap很明显与初始化相关,因此就去看一下它到底做了什么。然后大概画了一个流程图。具体的代码我就不带大家一起看了(因为我觉得自己去看代码会更清楚,这代码挺容易看懂的)
在这里插入图片描述
简单来说就是:

  1. 在初始化的时候,它会去找Spring容器中带有@Extension注解的Bean
  2. 将这些Bean注册到ExtensionRepository中
    a. ExtensionRepository可以简单理解成一个Map
    i. Key:ExtensionCoordinate,由接口名称、bizId、useCase、scenario组成
    ii. value:对应的具体实现类
  3. 现在我们就可以理解extensionExecutor.execute中的俩个参数了。根据这俩个参数就可以组装成一个ExtensionCoordinate
    a. Class targetClz:目标接口
    b. BizScenario:包含bizId、useCase、scenario

参考文章:
https://www.cnblogs.com/snidget/p/12961700.html

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Cola4.0是一种基于云计算、大数据和物联网技术的智能生产系统,它可以为企业提供一系列集成化的解决方案,实现智能制造、智能供应链、智能管理等多种功能。 一种常见的Cola4.0应用示例是工厂自动化生产线的智能化升级。通过引入物联网、传感器和数据分析技术,实现机器自动识别、自动调整和自主维护等功能,从而提高生产效率、降低生产成本、减少设备故障。 此外,Cola4.0还可以用于智能供应链管理,包括原材料采购、生产计划安排、库存管理和物流配送等环节,可实现实时监测、智能预警和优化管理,从而提升供应链的效率和透明度。 Cola4.0还可以应用于智能管理领域,如运营管理、质量控制和安全监管等,通过数据分析和智能算法,实现精细化管理和快速反应,从而提高企业的管理水平和竞争力。 总之,Cola4.0具有广泛的应用场景和巨大的市场潜力,可以为企业带来实实在在的经济效益和社会效益。 ### 回答2: Cola 4.0是一款基于人工智能、大数据分析和实时反馈功能的智能客服软件,广泛应用于各种企业的客服中心、电商平台、社交媒体等领域。以下是Cola 4.0的应用示例。 1. 客服中心:Cola 4.0可以接受语音、文字、图片等多种方式的用户咨询,并通过自然语言处理技术快速识别用户问题,并进行智能回答。同时,Cola 4.0还可以实时监测用户的情绪变化,根据用户情绪进行情景式回复,提高用户体验。 2. 电商平台:Cola 4.0可以对电商平台上的大量数据进行分析,包括用户行为、购买偏好等,从而为平台提供更精准的个性化推荐。此外,Cola 4.0还可以根据用户的历史消费记录和评价反馈,对商品进行智能排序,提高用户满意度和销售额。 3. 社交媒体:Cola 4.0可以实时监测社交媒体上的用户评论和反馈,包括情感分析、舆情监测等,从而为企业关注和应对公众舆论提供充分的依据和决策支持。此外,Cola 4.0还可以为企业提供智能推广和品牌宣传服务,进一步提升企业的品牌形象和知名度。 总之,Cola 4.0是一款承载了智能化、大数据化、个性化等多种技术创新的智能客服软件,自上市以来已在多个行业和领域取得了显著的成效,并得到了广大用户的认可和好评。相信在未来的发展中,Cola 4.0还会持续推出更多的创新功能和应用场景,为企业和用户带来更多更好的服务和体验。 ### 回答3: cola4.0是一款企业级应用开发平台,它拥有强大的应用构建和管理能力,能够为企业提供全方位、系统化的数字化解决方案。下面,我们来看一些cola4.0的应用示例。 一、物流管理应用 物流管理是一项涉及面广、复杂度高的工作,但它又是企业发展中不可或缺的一环。cola4.0可以根据企业需要创建一个物流管理系统,通过预警、跟踪、分配、实时监控等功能,实现整个供应链的精准管控,提高物流效率并降低成本。 二、销售管理应用 销售管理是企业营销中的一个重要环节,而如何管理好与客户关系也是企业发展的重cola4.0可以根据企业需求建立销售管理平台,包括客户信息、销售进度、跟进记录、销售漏斗、销售分析等功能,实现销售过程的全面管控和数据化分析。 三、人力资源管理应用 招聘、培训、考核、薪资等是人力资源管理中的重工作,而cola4.0可以创建一个专业的人力资源管理系统,使企业能够完全掌握人力资源情况,包括员工档案、组织架构、绩效考核、薪酬管理等功能,提高HR的工作效率和人员管理水平。 四、企业运营管理应用 企业运营涉及到多个方面,而cola4.0可以打造一个企业运营管理系统,帮助企业全面掌握业务运营情况,包括财务管理、采购管理、供应商管理、库存管理等核心功能,协助企业高效地运营,提高企业竞争力。 总之,cola4.0是一款具有广泛应用范围和高度定制化的企业级应用开发平台,它可以根据企业需求提供全方位的解决方案,改善企业运营效率、提高管理水平,实现企业数字化转型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值