2022
10-08
10-08
Java SPI简单应用案例详解
开篇本文主要谈一下JavaSPI(ServiceProviderInterface),因为最近在看Dubbo的相关内容,其中涉及到了一个概念-DubboSPI,最后又牵扯出来了JAVASPI,所以先从JavaSPI开整。正文平常学习一个知识点,我们的常规做法是:是什么有什么用怎么用这次我们倒着做,先不谈什么是SPI及其作用,来看下如何使用。使用1.创建一个maven工程2.创建一个接口类以及实现类//接口publicinterfaceHelloService...
继续阅读 >
1.什么是SPI SPI全称ServiceProviderInterface,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。SPI的作用就是为这些被扩展的API寻找服务实现。2.SPI和API的使用场景 API(ApplicationProgrammingInterface)在大多数情况下,都是实现方制定接口并完成对接口的实现,调用方仅仅依赖接口调用,且无权选择不同实现。 从使用人员上来说...
目录一、SPI1.1、JDK自带SPI实现1.2、DubboSPI二、加载-ExtensionLoader2.1、获取ExtensionLoader的实例2.2、加载扩展类2.2.1、loadExtensionClasses加载扩展类2.2.2、扩展包装类2.2.3、自适应扩展实现类2.2.4、自动激活扩展类三、总结四、附录一、SPI在Java中,SPI体现了面向接口编程的思想,满足开闭设计原则。1.1、JDK自带SPI实现从JDK1.6开始引入SPI机制后,可以看到很多使用SPI的案例,比如最常见的数据库驱动实现,在JDK中...
目录一、概述二、JDK自带SPI2.1、代码示例2.2、简单分析三、SPI与双亲委派3.1、SPI加载到何处3.2、SPI是否破坏了双亲委派四、DubboSPI4.1、基本概念4.2、代码示例4.3、源码分析五、总结一、概述SPI全称为ServiceProviderInterface,是一种模块间组件相互引用的机制。其方案通常是提供方将接口实现类的全名配置在classPath下的指定文件中,由调用方读取并加载。这样需要替换某个组件时,只需要引入新的JAR包并在其中包含新的实...
Java原生SPI面向接口编程+策略模式实现建立接口RobotpublicinterfaceRobot{/***测试方法1*/voidsayHello();}多个实现类实现接口RobotApublicclassRobotAimplementsRobot{publicRobotA(){System.out.println("HappyRobotAisloaded");}@OverridepublicvoidsayHello(){System.out.println("iamaveryveryhappyRobot");}publicvoidsayBye(){}}Ro...
简介什么是可扩展的应用程序呢?可扩展的意思是不需要修改原始代码,就可以扩展应用程序的功能。我们将应用程序做成插件或者模块。这样可以在不修改原应用的基础上,对系统功能进行升级或者定制化。本文将会向大家介绍如何通过java中的SPI机制实现这种可扩展的应用程序。SPI简介SPI的全称是JavaServiceProviderInterface。是java提供的一种服务发现的机制。通过遵循相应的规则编写应用程序之后,就可以使用ServiceLoader来加载...
最近在学习dubbo源码,dubbo在功能扩展方面,提供了SPI的扩展。初次看到SPI,还是不容易理解,下面记录SPI的学习。系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案等。面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的...