概述
SpringBoot学习之SPI机制浅析
- 前言
- 例子
- 例子2
- 现在假设有个需求我们要新增银联支付
前言
SpringBoot的零配置之一就是基于SPI。能很好的做扩展。
本篇学习下SpringBoot集成第三方技术的核心前置知识SPI的模式。
例子
ServiceLoader
类是java.util下的
接口,解析文档的接口
public interface IPraseDoc {
void prase();
}
解析Excel的实现类
public class ExcelParse implements IPraseDoc {
@Override
public void prase() {
System.out.println("解析excel");
}
}
假设我们现在要加个解析Word的实现类,那这里呢我们不用工厂方法模式。用SPI的方式去做。
加个解析Word实现类
public class WordParse implements IPraseDoc {
@Override
public void prase() {
System.out.println("解析word");
}
}
配置我们的SPI
编写启动测试
public class MainStart {
public static void main(String[] args) {
ServiceLoader<IPraseDoc> serviceLoader=
ServiceLoader.load(IPraseDoc.class);
for (IPraseDoc iPraseDoc : serviceLoader) {
iPraseDoc.prase();
//还可以去走某个接口
//if(iPraseDoc instanceof WordParse){
//iPraseDoc.prase();
//}
}
}
}
运行结果:
这样的话我们新加的接口都可以在配置文件里装入。代码的耦合性大大降低。
原理:原理就是反射的方式。
例子2
利用SPI机制再来实现个类似支付平台的功能
公用的支付接口
public interface PayStrategy {
/**
* 共同方法
* @return
*/
String toPayHtml();
}
支付宝支付的方式
public class AliPayStrategy implements PayStrategy {
@Override
public String toPayHtml() {
return "支付宝支付";
}
}
微信支付的方式
public class WeiXInPayStrategy implements PayStrategy {
@Override
public String toPayHtml() {
return "微信支付";
}
}
根据支付类型进行相应调用的类
public class PayContextStrategy {
public static void getPayStrategy(Class<?> clazz) {
ServiceLoader<PayStrategy> serviceLoader=ServiceLoader.load(PayStrategy.class);
for (PayStrategy payStrategy : serviceLoader) {
if(payStrategy.getClass()==clazz){
System.out.println(payStrategy.toPayHtml());
break;
}
}
}
}
进行微信支付的调用
public static void main(String[] args) {
getPayStrategy(WeiXInPayStrategy.class);
}
现在假设有个需求我们要新增银联支付
只需要进行这两步,我们就完成了银联支付
上边的例子非常简单,实际业务中,我们还需要堆入参和出参,回调等进行相关的编写,但是骨架是这样的,我们进行不同的扩展添加即可。
最后
以上就是懵懂羊为你收集整理的SpringBoot神器SPI机制学习!!!前言例子例子2的全部内容,希望文章能够帮你解决SpringBoot神器SPI机制学习!!!前言例子例子2所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复