Java SPI机制
时间:2022-07-24
本文章向大家介绍Java SPI机制,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Service Provider Interfaces:服务提供发现,动态替换发现的机制
示例:
一个接口:
public interface Calc {
Logger logger = LoggerFactory.getLogger(Calc.class);
Object calc(int calcType);
}
两个实现:
计算sin值:
public class SinCalc implements Calc {
@Override
public Object calc(int calcType) {
Object value = Math.sin(calcType);
logger.info("sin result: {}", value);
return value;
}
}
计算开方:
public class SqrtCalc implements Calc {
@Override
public Object calc(int calcType) {
Object value = Math.sqrt(calcType);
logger.info("sqrt result: {}", value);
return value;
}
}
一个服务加载类:
@Component
public class SpiService {
public Object execCalc(int value){
ServiceLoader<Calc> loader = ServiceLoader.load(Calc.class);
Iterator<Calc> iterator = loader.iterator();
while (iterator.hasNext()) {
return iterator.next().calc(value);
}
return null;
}
public static void main(String[] args) {
new SpiService().execCalc(100);
}
}
一个配置文件:
classpath:META-INF/services/xxx.xxx.Calc
内容:需要加载的功能类
如:xxx.xxx.SqrtCalc
#org.windwant.spring.core.spi.service.SinCalc
org.windwant.spring.core.spi.service.SqrtCalc
#org.windwant.spring.core.spi.service.LogCalc
则 运行服务加载类执行,输出计算开方。
示例应用项目:https://github.com/windwant/spring-dubbo-service
官方文档:https://docs.oracle.com/javase/tutorial/sound/SPI-intro.html
- Quartz.net通过配置文件来完成作业调度
- JavaScript 基础(一)
- 我也来说说.net开源
- 是时候对员工进行网络安全培训了:黑客正将目标瞄准打印机
- 进度条ProgressBar
- Microsoft Visual Studio International Pack
- 柯洁5冠在手“食言”再战AI:我已看开 输赢无所谓
- JGulp: 利用Gulp 配置的前端项目自动化工作流
- 微软Enterprise Library 4.0将支持依赖注入
- 时钟AnalogClock与DigitalClock
- 细数那些在2017年被黑客滥用的系统管理工具和协议
- Compass: 在你的应用中集成搜索功能
- 列表选择Spinner
- 巧用CSS3 :target 伪类制作Dropdown下拉菜单(无JS)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 第4天:美团点评2020校招测试方向笔试试卷分析
- Element-UI饿了么时间组件控件按月份周日期,开始时间结束时间范围限制参数
- 微信小程序flex布局
- 细数 TS 中那些奇怪的符号
- 安装RabbitMQ无法访问localhost:15672的管理界面解决
- koa中http服务与websocket服务共享端口
- 第23天:NLP实战(七)——中文新闻主题分类
- Swoole v4.5.3 版本发布
- .NET5.0 单文件发布打包操作深度剖析
- 使用ng-container标签在SAP Spartacus里插入UI
- 自定义SAP Spartacus Cart界面
- 还是只使用console.log()进行调试?好吧,其实还有更多。
- SNMP++: Transport is not supported
- Codeforces Round #666 (Div. 2) A-D
- 深度剖析前端JavaScript中的原型(JS的对象原型)