SPI
Posted windliu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SPI相关的知识,希望对你有一定的参考价值。
SPI全称Service Provider Interface,即服务提供接口
java中:
ServiceLoader<RedisClient> serviceLoader = ServiceLoader.load(RedisClient.class);
for(RedisClient redisClient: serviceLoader){
System.out.println(redisClient);
}
这样编码的前提是在resources下,存在目录文件META-INF/service/com.xxxx.Interface
文件内容则为实现这个接口的类,可以使用换行符一次配置多个服务实现
com.xxx.JedisClientA
com.xxx.JedisClientB
这样做的好处是根据依赖自动装配实例,达到类似于自动注册的功能
java SPI是有一些缺点的:
- 如果同时依赖了多个实现包,则会将全部实现都初始化
因此,诸如spring MVC,spring boot,都实现了自己的SPI,而没有直接使用java SPI
spring在META-INF/spring.factories文件中定义了自动装配的类,Spring会读取这些文件,取出其中的接口及实现进行初始化
org.springframework.beans.BeanInfoFactory=org.springframework.beans.ExtendedBeanInfoFactory
以上是关于SPI的主要内容,如果未能解决你的问题,请参考以下文章
Linux——Linux驱动之玩转SPI(上)Linux下SPI驱动框架简析及SPI设备驱动代码框架实现步骤