哈喽,大家好,我是指北君。又是奋斗的一天,先来段经典语录鼓舞下自己。
凡事欲其成功,必要付出代价:奋斗。 ——爱默生
打好“鸡血”后,接下来就开始新的学习
1、前言
在之前的JVM 分析系列之类加载提到过 Java SPI 机制,主要是类加载器反双亲委派的实现(第三方包不在指定jdk路径,一般类加载器无法加载,需要特殊的ContextClassLoader加载以便使用)。本次将对 SPI机制进行详解,并结合案例介绍其在实际场景中具体使用。
提示:以下是本篇文章正文内容,案例仅供对比参考
2、什么是SPI机制?
- SPI(全称:Service Provider Interface),是jdk内置的一种服务提供发现接口机制,旨在由第三方服务实现或扩展为组件,方便开发人员快速集成指定扩展组件满足指定的需求。这对于应用或平台扩展来说,无疑是一种成本较低、动态灵活的方案。
- SPI机制调度过程(业务调用方可根据加载的扩展实现类实现功能)
- 调用流程
3、实现方式及使用场景
鉴于目前实际项目涉及范围,总结出的常见应用场景。
3.1 接口全限定文件名方式
- 即在resource文件下创建META/services/目录,并在此目录下新建文件,文件名称为接口类权限定文件名,如 com.lgy.spidemo.serviceway.SpiService。(不好理解就是接口类的package地址 + 接口类名) 使用场景一:
- 场景描述:不同部门类型的员工需要从不同的考勤应用获取出勤信息,如职能部门仅拉取钉钉考勤,业务部门需要拉取钉钉考勤的基础上再结合自研考勤模块数据汇总出勤结果。
- 实现方式:抽象通用拉取考勤接口,定义不同部门人员考勤统计实现类。
- 直接上代码:
- 通用接口: ``` package com.lgy.spidemo.serviceway;
1 |
|
4、总结
- 本次讲解的两种方式均是基于SPI机制,可见是多么受开发追捧。当然,还有很多种实现方式,我个人觉得最主要的还是能够在自己的掌控范围内去使用,毕竟有问题可以通过自己的学习理解去解决。
- 最后说一句,没有更好的技术知识,只有更适合的技术应用,结合实际,检出真理。