Java SPI机制
来源:互联网 发布:梦幻西游mac右键 编辑:程序博客网 时间:2024/05/22 02:32
有这样的一个应用场景,在某个JAR包内,有一个接口IA,然后有3个IA接口的具体实现类,分别是AIA,BIA,CIA。
SPI的全称是Service Provider Interface。
2.1、 commons-logging中的例子
这段代码的意思就是说使用SPI机制,在Jar包的"META-INF/services/"目录下查找一个文件名为"org.apache.commons.logging.LogFactory"的文件,在文件中可以配置默认要使用的LogFactory具体实现类的全限定名。
2.2、自己的例子
在META-INF/services/spi.IA文件中的内容如下:
那么如果在该JAR包内其他的类中使用接口IA的时候,硬编码IA对象对应的具体实现类,就会导致非常不灵活。这就是SPI机制产生的场景由来。
SPI的全称是Service Provider Interface。
简单来说,SPI机制提供了一个表达接口和其具体实现类之间的绑定关系的方案。具体是在JAR包的"META-INF/services/"目录下建立一个文件,文件名是接口的全限定名,文件的内容可以有多行,每行都是该接口对应的具体实现类的全限定名。
2.1、 commons-logging中的例子
在commons-logging:commons-logging:1.1包中有个LogFactory抽象类(全限定名是"org.apache.commons.logging.LogFactory"),在其中有个静态方法
public static LogFactory getFactory() throws LogConfigurationException
用于获取一个默认的LogFactory实例。
这段代码的意思就是说使用SPI机制,在Jar包的"META-INF/services/"目录下查找一个文件名为"org.apache.commons.logging.LogFactory"的文件,在文件中可以配置默认要使用的LogFactory具体实现类的全限定名。
2.2、自己的例子
现在有以下类层次结构
IA的内容如下:
AIA的内容如下:
BIA的内容如下:
CIA的内容如下:
Main的内容如下:在META-INF/services/spi.IA文件中的内容如下:
运行spi.Main,可以发现输出结果如下:
参考文献:
[1]http://singleant.iteye.com/blog/1497259
[2]http://blog.csdn.net/fenglibing/article/details/7083071
0 0
- Java的SPI机制
- java spi 机制
- java中的SPI机制
- Java的SPI机制
- Java SPI机制
- ServiceLoader : JAVA SPI 机制
- Java spi机制
- Java SPI机制
- Java spi机制浅谈
- java中的SPI机制
- Java SPI机制
- Java SPI机制
- Java SPI机制简介
- Java spi机制浅谈
- Java的SPI机制
- Java SPI机制实践
- Java spi机制浅谈
- java中的SPI机制
- 第十三章 守护进程
- Learning Python 008 正则表达式-001
- linux系统 Vim命令合集
- Hibernate学习笔记(二)
- 从关系型数据库到非关系数据库
- Java SPI机制
- 杭电acm ----1108题
- 小技巧:eclipse如何设置显示行号
- Zabbix添加自定义监控项
- JavaScript 对象学习笔记(下)
- TCP、UDP协议,java网络通信基础
- Sruts2与Struts1框架处理流程的区别
- 矩阵
- Codeforces 570A Elections