聊聊、Java SPI
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相关推荐
- 《开源者说》08期:聊聊Java那些事儿
<开源者说>08期:聊聊Java那些事儿 发表于2015-06-10 18:23| 4388次阅读| 来源CSDN| 28 条评论| 作者陈秋歌 Java开源者说 陈阳宫力许斌 摘要:20 ...
- Flink从入门到精通100篇(十一)-Java SPI 机制在 Flink SQL 中的应用
Java SPI 机制简介 Java SPI机制,即Java Service Provider Interface,是Java提供的基于"接口编程 + 策略模式 + 配置文件"组合 ...
- Java SPI 源码解析及 demo 讲解
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:Java实现QQ登录和微博登录个人原创+1博客:点击前往,查看更多 作者:JlDang 来源:https://s ...
- gc java root_聊聊Java的GC机制
原标题:聊聊Java的GC机制 近日,MIUI在小米全球社区发布公告,表示MIUI将在全球市场销售的手机中预装谷歌拨号及谷歌消息应用程序(中国.印度.印度尼西亚等市场除外).小米表示,小米9T Pro ...
- java 委托原则_为什么说 Java SPI 的设计违反双亲委派原则
一.双亲委派模型 1.类加载器可以细分为如下三类 启动类加载器(Bootstrap ClassLoader),负责将所有存放在\lib目录中的,或者被-Xbootclasspath参数所指定路径中,并 ...
- java spi使用详解
前言 SPI英文全称为Service Provider Interface,顾名思义,服务提供者接口,它是jdk提供给"服务提供厂商"或者"插件开发者"使用的接 ...
- java整段标记_聊聊JAVA GC系列(7) - 标记整理算法
在介绍"平平无奇"的标记清除算法时, 还留下了另一个问题, 就是内存碎片的问题. 内存碎片的问题是指, 每次回收的内存都是比较分散的, 可以加起来是一个比较大的数值, 但是由于可用 ...
- java 获取泛型_聊聊Java泛型擦除那些事
>版权申明]非商业目的注明出处可自由转载 博文地址:https://blog.csdn.net/ShuSheng0007/article/details/89789849 出自:shushen ...
- Java SPI机制详解
Java SPI机制详解 1.什么是SPI? 2.SPI的用途 Driver实现 Mysql DriverManager实现 spi工具类`ServiceLoader` 将自己注册到驱动管理器的驱动列 ...
- 敞开心扉,一起聊聊Java多线程
目录 敞开心扉,一起聊聊Java多线程(结尾有福利~) 一.线程的实现方式 1.继承Thread类,重写run方法 2.实现Runnable接口,重写run方法 3.实现Callable接口重写run ...
最新文章
- vim中权限不足时不用退出而强制保存
- Windows驱动程序的分类
- javamail.providers not found
- android jsoup简书,jsoup爬虫简书首页数据做个小Demo
- 增大iphone音量技巧_就算我们把手机音量开到最大!外放声音还是小,那是这个设置没开...
- 实现OC与JS的交互
- SIP协议 会话发起协议(二)
- 360二代抢票神器 v7.1.1.502 官方版
- Swift开发之简单计算器项目
- 计算机思维测试题,孩子逻辑思维测试题有哪些
- 思考(六十四):游戏中的角色ID问题
- IE下载文件时,中文文件名乱码问题
- caj转word免费转换怎么操作?
- python清华大学出版社答案_清华大学出版社的这本Python入门书,出版8年 仍经久不衰...
- rational rose rational purify rational quanlity 安装
- Java Word中的文本、图片替换功能
- 网上收集的几个花指令
- 抗锯齿插件MadGoat-SSAA使用需要注意的地方
- android商务办公型计算器开发与设计,可编程科学计算器v1.6.7.56 安卓版_Scientific Calculator Plus-腾牛安卓网...
- 解决Tuxera试用过期重装问题