java 扩展机制_【Java】java扩展机制SPI 实现

一、SPI是什么

SPI机制(Service Provider Interface),是一种将服务接口与服务实现分离以达到解耦、大大提升了程序可扩展性的机制。引入服务提供者就是引入了spi接口的实现者,通过本地的注册发现获取到具体的实现类,轻松可插拔。

场景:比较典型的一个场景就是JDBC中加载驱动的过程。

二、使用demo

demo工程结构:

0def810357df695ab695627d86c97be3.png

1)首先我们定义一个提供接口的三方包SpiInterface

public interfaceSpiInterface {public voidmethod();

}

2)然后我们分别定义两个实现SpiInterface接口的三方实现SpiIml01、SpiIml02;

1、SpiIml01

public class SpiIml01 implementsSpiInterface {public voidmethod() {

System.out.println("print SpiIml01");

}

}

pom:引入三方接口包SpiInterface

com.robin

SpiInterface

1.0-SNAPSHOT

true

2、SpiIml02

public class SpiIml02 implementsSpiInterface {public voidmethod() {

System.out.println("print SpiIml02");

}

}

pom:引入三方接口包SpiInterface

com.robin

SpiInterface

1.0-SNAPSHOT

true

3)并且对于实现类项目,在各项目META-INF/services目录下创建一个以“接口全限定名”为命名的文件,内容为实现类的全限定名;

0ad46bd5e9845daa8b52742159e416b0.png

4)定义测试项目SpiDemo

SpiDemo

public classSpiDemo {public static voidmain(String[] args) {

ServiceLoader load = ServiceLoader.load(SpiInterface.class);

Iterator iterator =load.iterator();while(iterator.hasNext()) {

SpiInterface next=iterator.next();

next.method();

}

}

}

pom:引入三方接口包、以及连个实现包

com.robin

SpiIml02

1.0-SNAPSHOT

com.robin

SpiInterface

1.0-SNAPSHOT

com.robin

SpiIml01

1.0-SNAPSHOT

运行main方法:通过结果可知两个实现类都有获取到;获取的先后顺序,取决于你maven引入的顺序,谁在前谁先获取

38a1be096073734d1acc7df55226ef72.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值