java中SPI机制初探
关键词
java、Provider、META-INF/service、SPI
是什么?
一种为接口寻找服务实现的机制。全称是:service provider interface。
有什么用?
将接口和实现之间的关系转移到程序之外,直接更换实现jar包,程序自动加载新的实现方案。
spi协议以javax.validation为例
- 接口
在接口jar中定义接口javax.validation.spi.ValidationProvider
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
2. 实现
在实现jar包中一定要有META-INF/services/目录,在services下有以服务接口命名的文件,文件中写明实现类,即文件META-INF/services/javax.validation.spi.ValidationProvider中写上实现的类的全名:org.hibernate.validator.HibernateValidator。
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.3.4.Final</version>
</dependency>
后记
java中使用spi这种设计的还有很多,比如:
interface | implements |
---|---|
slf4j | logback、log4j等 |
jdbc | mysql、oracle等 |