如何跨项目使用SPI扩展点

本文介绍了如何在不同项目间实现SPI扩展点的共享,以解决代码臃肿和维护性问题。通过两种方式探讨了项目A如何发现并使用项目B和项目C实现的SPI接口:一是JAR包包含,二是利用Dubbo注册中心。重点讲述了利用Dubbo和注解反射技术,包括定义SPI接口注解、识别实现类、服务注册及通过标签区分不同业务线的实现。
摘要由CSDN通过智能技术生成

    SPI-服务扩展点可以使得项目结构更加解耦,比如我司在支付方式模块中,全平台都可以使用在线支付,单由于业务场景要求,不同的业务实例会有定制化的支付方式,如非国有性质的采购人可以申请使用账期支付等。原先的技术实现是有订单模块代码中根据业务实例写死一堆的if-else业务实现,随着接入业务的增加,代码变得越来越臃肿和不可维护。为了该模块更具扩展性和易维护性,我们希望通过由订单中心提供支付方式SPI扩展接口,不同的业务线可以更灵活的配置各自的支付方式。

    在一个项目中定义一个扩展接口,然后写不同的实现,并在项目中的META-INF/services路径下写好扩展点实现路径,然后项目在启动的时候回加载这些实现;现在的问题是如何在不同的项目中使用SPI,也就是项目A定义了一个SPI接口,项目B和项目C在实现了其接口后,项目A怎么找到这些实现?这里大概有两种方式:

  • 通过JAR包,项目B和项目C实现项目A的SPI接口后,打包成JAR后放到项目A中;
  • 通过dubbo注册中心机制,项目B和项目C在实现项目A的SPI接口后,向注册中心注册其实现,然后项目A再通过注册中心获取具体实现类和方法;

    由于小菜不想每次修改实现或有新接入方时都要重新打包,并复制给SPI提供方,来来回回,不仅繁琐,而且中间也容易出错。所以这里主要探讨第二种方案是怎么做的。

注解和反射技术是做这件事的一大利器。

1、首先,应该定义一个注解,用于标识那些接口是SPI接口;凡是接口有该注解的,我们单独先把它拎出来;


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值