「java的spi作用」java中的spi机制
本篇文章给大家谈谈java的spi作用,以及java中的spi机制对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、JAVA中API里的spi是什么意思,有什么用处?
- 2、电脑中spi是什么?有什么用
- 3、java的API中有哪些常用的包?
- 4、SPI用法简介
- 5、java spidevice 在什么类里
- 6、扩展点设计
JAVA中API里的spi是什么意思,有什么用处?
JDK内置的一种服务提供调用机制。
主要用处是不用改动源码就可以实现扩展。
电脑中spi是什么?有什么用
第一种解释:
SPI是串行(serial)、并行(parallel)和独立(independent)三个英文单词的首字母,这三个词几种说明了多重记忆系统之间的关系。SPI理论认为,记忆系统是由多个执行特定功能的记忆模块构成的。这些记忆模块的关系表现为两个方面:信息以串行的加工方式进入记忆系统,在一个记忆模块中的编码依赖于某些其他功能模块中信息加工是否成功。也就是说,一个记忆模块的输出提供给另外模块的输入;信息以并行的方式存储在各个特定的记忆模块中,这样提取一个子系统的信息就不会牵连其他的子系统,各个子系统之间是相对独立的。
第二种解释:
SPI(system packet interface,系统包接口)用于物理层和链路层的链接,广泛地应用在通信接口中,主要应用于oc-48、oc-192和0c-768的同类业务,以及10gb/s以太网,spi主要有3个规格在oif组织中,即是spi-3、spi-4和spi-5,率和带宽业务的应用。
第三种解释:
SPI scientific performance index 科学工作指数。
java的API中有哪些常用的包?
Application Programming Interface 应用程序编程接口,Java的api就多的数不清了,平时编程用的都是API。
SPI用法简介
spi是Service Provider Interface的缩写。使用spi技术可以通过修改配置的方式,更换程序中某个接口的实现类,从而改变程序行为。spi的用法如下:
建立文件META-INF\services\com.foo.bar.service.FooService,写入下面两行:
编辑文件META-INF/services/java.sql.Driver,加入所需要的驱动类。
参考资料
java spidevice 在什么类里
java spi的具体约定为:当服务的提供者,提供了服务接口的一种实现之后,在jar包的META-INF/services/目录里同时创建一个以服务接口命名的文件。该文件里就是实现该服务接口的具体实现类。而当外部程序装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入。 基于这样一个约定就能很好的找到服务接口的实现类,而不需要再代码里制定。jdk提供服务实现查找的一个工具类:java.util.ServiceLoader
扩展点设计
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作用的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java中的spi机制、java的spi作用的信息别忘了在本站进行查找喔。