「javaspi架构」JAVA技术架构

博主:adminadmin 2022-12-04 14:48:07 72

今天给各位分享javaspi架构的知识,其中也会对JAVA技术架构进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

扩展点设计

02_扩展点设计

供应链的业务中,一个业务流程涉及到多个节点,并且每个节点的实现逻辑不同,如下图所示

每一个节点都可能存在不同的实现,有时候需要从多个实现中选择一个(互斥),有时候需要选择多个(组合)。如果不对各种实现进行良好的管理,带来的问题是:

针对于上一节中提到的节点多种实现的问题,Java的SPI可以解决我们的问题。

Java SPI使用约定:

1、当服务提供者提供了接口的一种具体实现后,在jar包的META-INF/services目录下创建一个以“接口全限定名”为命名的文件,内容为实现类的全限定名;

2、接口实现类所在的jar包放在主程序的classpath中;

3、主程序通过java.util.ServiceLoder动态装载实现模块,它通过扫描META-INF/services目录下的配置文件找到实现类的全限定名,把类加载到JVM;

4、SPI的实现类必须携带一个不带参数的构造方法;

扩展点(ExtensionPoint)必须通过接口申明,扩展实现(Extension)是通过Annotation的方式标注的,Extension里面使用BizCode和TenantId两个属性用来标识身份,

框架的Bootstrap类会在Spring启动的时候做类扫描,进行Extension注册,在Runtime的时候,通过TenantContext来选择要使用的Extension。TenantContext是通过Interceptor在调用业务逻辑之前进行初始化的。整个过程如下图所示:

扩展点实现路由

比如在一个CRM系统里,客户要添加联系人Contact是一个,但是在添加联系人之前,我们要判断这个Contact是不是已经存在了,如果存在那么就不能添加了。不过在一个支持多业务的系统里面,可能每个业务的冲突检查都不一样,这是一个典型的可以扩展的场景。

那么在SOFA框架中,我们可以这样去做。

2、实现业务的扩展实现

3、在领域实体中调用扩展实现

cola扩展点的缺陷:

扩展点必须以ExtPt结尾,通过ExtPt明显标识这是一个扩展点,扩展点实现类以Ext结尾

用在扩展点实现类上,使用该注解,会将实现类注入到spring容器中

1、基于Strategy Pattern的扩展,没有找到一个很好的固化到框架中的方法

2、使用Strategy Pattern,没有规范的限制,编码相对随意

Java spi属于什么设计模式

7 SPI模式 7.1 介绍 SPI模式由一个由基于闪存

SD存储卡提供的次要通信协议组成.此模式是SD存

储卡协议的子集。此接口在上电(CMD0)后的每一个复位命令期间被选择。 SPI标准只定义物理链接,而不提供数据传输协议。SD存储卡SPI执行利用SD存储卡协.

SPI用法简介

spi是Service Provider Interface的缩写。使用spi技术可以通过修改配置的方式,更换程序中某个接口的实现类,从而改变程序行为。spi的用法如下:

建立文件META-INF\services\com.foo.bar.service.FooService,写入下面两行:

编辑文件META-INF/services/java.sql.Driver,加入所需要的驱动类。

参考资料

基于spring factories机制开发SDK

SPI机制:为某个接口寻找服务实现的机制

java SPI就是提供这样的一个机制 ,需要在META-INF目录中设置接口的实现,以实现服务接口与实现的解耦。第三方服务厂商或者插件服务,可以依据SPI机制,实现功能扩展。

在Spring中也有一种类似与Java SPI的加载机制。它在META-INF/spring.factories文件中配置接口的实现类,我们成为Spring factories机制,基于此我们可以自定义stater或SDK供他人使用,项目只在pom.xml中引入SDK,无须配置即可实现功能集成。

最近的需求为例,需要实现授权功能SDK,以供其他产品使用

项目目录结构如下

第一步:在包名root目录下创建自动配置类 EsbrSdkAutoConfig

内容如下:添加

@Configuration

@ComponentScan(basePackageClasses = EsbrSdkAutoConfig.class)

标识此类为配置类,并配置扫描路径为当前类

第二步;    在resources/META-IN目录下,创建spring.factories文件

内容如下:

将org.springframework.boot.autoconfigure.EnableAutoConfiguration的自动配置为值设置为第一步的EsbrSdkAutoConfig的全限定类名(包名+类名)

第三步:编写SDK的Service

通过以上三步,即可基于Spring factories机制完成自定义Starter,在其他项目pom.xml中引入该starter即可

是不是很简单,下面讲解下原理

spring-core包里定义了SpringFactoriesLoader类,这个类实现了检索META-INF/spring.factories文件中的配置,

并通过 loadFactoryNames方法() 获取其接口类的名称

在这个方法中会遍历整个ClassLoader中所有jar包下的spring.factories文件。也就是说我们可以在自己的jar中配置spring.factories文件,不会影响到其它地方的配置,也不会被别人的配置覆盖。

将org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.org.bjca.esbr.sdk.EsbrSdkAutoConfig

基于springboot自动配置,会扫描并初始化EsbrSdkAutoConfig类,并将EsbrSdkAutoConfig作为basepackage,扫描改类及其该类子包下的类,加载到spring容器。

javaspi架构的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于JAVA技术架构、javaspi架构的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-04,除非注明,否则均为首码项目网原创文章,转载请注明出处。