SPI,Service Provider Interface,服务提供者接口。

Animal 接口


package com.rockcode.www.spi;

public interface Animal {

void speek();

}

Dog 类


package com.rockcode.www.spi;

public class Dog implements Animal {

public void speek() {

System.out.println("....Dog....");
}

}

SPI规范


com.rockcode.www.spi.Animal 文件内容 com.rockcode.www.spi.Dog

注意,文件必须位于 Jar 包的 META-INF/services 下面,名称与接口名相同

ServiceLoader


ServiceLoader<Animal> loader = ServiceLoader.load(Animal.class);
for (Animal an : loader) {
an.speek();
}

源码


URL url = ClassLoader.getSystemClassLoader().getResource(
"META-INF/services/" + Animal.class.getName());
InputStream ins = null;
BufferedReader br = null;
try {
ins = url.openStream();
br = new BufferedReader(new InputStreamReader(ins));

String ln = br.readLine();
System.out.println(ln);

try {
Class<?> c = Class.forName(ln);
try {
Object o = c.newInstance();
Dog d = (Dog) c.cast(o);
d.speek();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null)
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
if (ins != null)
try {
ins.close();
} catch (IOException e) {
e.printStackTrace();
}
}

转载于:https://www.cnblogs.com/xums/p/10398467.html

聊聊、Java SPI相关推荐

  1. 《开源者说》08期:聊聊Java那些事儿

    <开源者说>08期:聊聊Java那些事儿 发表于2015-06-10 18:23| 4388次阅读| 来源CSDN| 28 条评论| 作者陈秋歌 Java开源者说 陈阳宫力许斌 摘要:20 ...

  2. Flink从入门到精通100篇(十一)-Java SPI 机制在 Flink SQL 中的应用

    Java SPI 机制简介 Java SPI机制,即Java Service Provider Interface,是Java提供的基于"接口编程 + 策略模式 + 配置文件"组合 ...

  3. Java SPI 源码解析及 demo 讲解

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:Java实现QQ登录和微博登录个人原创+1博客:点击前往,查看更多 作者:JlDang 来源:https://s ...

  4. gc java root_聊聊Java的GC机制

    原标题:聊聊Java的GC机制 近日,MIUI在小米全球社区发布公告,表示MIUI将在全球市场销售的手机中预装谷歌拨号及谷歌消息应用程序(中国.印度.印度尼西亚等市场除外).小米表示,小米9T Pro ...

  5. java 委托原则_为什么说 Java SPI 的设计违反双亲委派原则

    一.双亲委派模型 1.类加载器可以细分为如下三类 启动类加载器(Bootstrap ClassLoader),负责将所有存放在\lib目录中的,或者被-Xbootclasspath参数所指定路径中,并 ...

  6. java spi使用详解

    前言 SPI英文全称为Service Provider Interface,顾名思义,服务提供者接口,它是jdk提供给"服务提供厂商"或者"插件开发者"使用的接 ...

  7. java整段标记_聊聊JAVA GC系列(7) - 标记整理算法

    在介绍"平平无奇"的标记清除算法时, 还留下了另一个问题, 就是内存碎片的问题. 内存碎片的问题是指, 每次回收的内存都是比较分散的, 可以加起来是一个比较大的数值, 但是由于可用 ...

  8. java 获取泛型_聊聊Java泛型擦除那些事

    >版权申明]非商业目的注明出处可自由转载 博文地址:https://blog.csdn.net/ShuSheng0007/article/details/89789849 出自:shushen ...

  9. Java SPI机制详解

    Java SPI机制详解 1.什么是SPI? 2.SPI的用途 Driver实现 Mysql DriverManager实现 spi工具类`ServiceLoader` 将自己注册到驱动管理器的驱动列 ...

  10. 敞开心扉,一起聊聊Java多线程

    目录 敞开心扉,一起聊聊Java多线程(结尾有福利~) 一.线程的实现方式 1.继承Thread类,重写run方法 2.实现Runnable接口,重写run方法 3.实现Callable接口重写run ...

最新文章

  1. vim中权限不足时不用退出而强制保存
  2. Windows驱动程序的分类
  3. javamail.providers not found
  4. android jsoup简书,jsoup爬虫简书首页数据做个小Demo
  5. 增大iphone音量技巧_就算我们把手机音量开到最大!外放声音还是小,那是这个设置没开...
  6. 实现OC与JS的交互
  7. SIP协议 会话发起协议(二)
  8. 360二代抢票神器 v7.1.1.502 官方版
  9. Swift开发之简单计算器项目
  10. 计算机思维测试题,孩子逻辑思维测试题有哪些
  11. 思考(六十四):游戏中的角色ID问题
  12. IE下载文件时,中文文件名乱码问题
  13. caj转word免费转换怎么操作?
  14. python清华大学出版社答案_清华大学出版社的这本Python入门书,出版8年 仍经久不衰...
  15. rational rose rational purify rational quanlity 安装
  16. Java Word中的文本、图片替换功能
  17. 网上收集的几个花指令
  18. 抗锯齿插件MadGoat-SSAA使用需要注意的地方
  19. android商务办公型计算器开发与设计,可编程科学计算器v1.6.7.56 安卓版_Scientific Calculator Plus-腾牛安卓网...
  20. 解决Tuxera试用过期重装问题

热门文章

  1. Java的知识点31——线程同步
  2. 微信小程序开发2——数据绑定、控制属性
  3. Python 技术篇-PyQt5动画功能演示,组件移动、尺寸改变动画演示
  4. 电磁场第二章公式总结
  5. poj 2392 dp 不是很懂哎!!!Space Elevator
  6. K-Means算法理论及Python实现
  7. linux权限管理(chown、chgrp、chomd)
  8. 网络安装Centos x64 6.10
  9. JavaScript之创建对象的模式
  10. HDU4549 M斐波那契数列 —— 斐波那契、费马小定理、矩阵快速幂