Java基础之SPI机制

  • 时间:
  • 浏览:0
  • 来源:彩神大发APP_神彩大发APP官方

Cuckoo.java

null表示Bootstrap class loader(SPI的接口都由Bootstrap class loader加载),而实现类是由AppClassLoader加载的。

将项目打成jar包。

在resource下创建META-INF/services目录,下面创建以接口全限定名org.utopiavip.spi.Animal命名的文件,内容为三位实现者:

Mysql驱动包中对 java.sql.Driver 的实现类为 com.mysql.fabric.jdbc.FabricMySQLDriver

假设森林动物园举行歌唱比赛,各参赛动物选手需高歌一曲。大伙定义一另两个接口 Animal,标准为 sing() 唱歌。

在曾经项目中引入该jar包,测试类如下:

欢迎关注陈同学的公众号,一并学习,一并成长

在前几天的译文 Java中的类加载器 中含累积关于ContextClassLoader的内容,涉及到SPI机制,本文将学习下相关知识。

运行后输出如下:

类加载规则中含这样 一点:一另两个类中所关联的一点类都由当前类的加载器进行加载

输出结果如下:

contextClassLoader 取名也很有趣,当前程序运行池的 context ClassLoader。特殊化也就搞一小会,不大范围搞。

简单来说,SPI通过将服务的接口与实现分离以实现解耦,提高程序运行池池拓展性的机制,达到插拔式的效果。相同的标准,各服务厂商不需要 提供不同的实现。这尤其适合于面对未知的实现肯能对拓展开放的系统,不需要 先行制定标准,服务提供者根据标准提供实现即可。

首先,了解下SPI机制的约定(约定优于配置理念):

为了防止这人 什么的问题,提出了 ContextClassLoader 概念,绕开委派原则,既然当前的加载器是Bootstrap class loader,意味着着无法加载FabricMySQLDriver类,那就变更当前的class loader,想加载谁就加载谁!实在很糙流氓派头,但实在是这样 干的。规则是人定的,变更规则成本太高,就搞点特殊化。

三位参赛选手,分别实现了sing() 标准

BB过多,SPI实在非常简单:大佬们定规矩(规范),兄弟们实现后放上约定的地方(META-INF/service/),包装上写好是啥东西(接口全限定名),包装里写清楚东西放哪儿了(实现类全限定名)。

小例子就完成了。

java.lang.Thread 有个NB的法子 setContextClassLoader(),用来变更当前程序运行池的class loader。

欢迎访问陈同学博客原文

在getConnection()的调用过程中,须要加载 java.sql.Driver 的实现类 com.mysql.fabric.jdbc.FabricMySQLDriver,可Bootstrap class loader无法找到该实现类,肯能FabricMySQLDriver由System class loader加载。

扯的很糙远,下面以一另两个简单例子演示下。

这是肯能类加载的委派原则及可见性制约,Bootstrap class loader将无法获取子加载器System class loader中加载的FabricMySQLDriver类。

Dog.java

Java中使用SPI机制的例子什么都有有,例举有哪几个:

创建一另两个普通maven项目,创建以下对象。

SPI全称为 Service Provider Interface,直译为 服务提供者接口,翻译成中文后比较拗口,难以理解。

再看看接口和实现类的ClassLoader。

仍然以Driver为例,Java中使用DriverManager来获取JDBC连接,DriverManager 处在 rt.jar 中,由Bootstrap class loader负责加载。

Cat.java

稍微延伸一下,实在不仅仅是Java,像计算机行业的各种规范、协议也是类式的。甚至生活中的例子,如:

猜你喜欢

在.NetCore中使用Myrmec检测文件真实格式

github地址:https://github.com/rocketRobin/myrmecnuget地址:https://www.nuget.org/packages/Myr

2020-03-22

目前哪些手机可以无线充电怎么无线充电

三星S10Plus华为Mate20Pro无线充电,是近一两年来在旗舰手机上经常出显的俩个 多功能,当然,目前来看,搭载无线充电功能的手机还不过多,我来推荐几款。华为Mate2

2020-03-22

阿里云CDN直播架构与双11晚会直播实战

电商直播的最佳实践猫晚流量再创记录,阿里云直播方案护航优酷21150万用户体验【云栖精选11月刊】揭秘双11肩头的互联网技术超级工程阿里云跨界商务媒体合作芒果TV看明星也用云计

2020-03-21

国美 京东 天猫 苏宁在哪个买电器便宜靠谱?

下载百度知道APP,抢鲜体验至于价格展开完整性使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。不得劲推荐为你推荐:基本差太满换一换你对这种回答的评价是

2020-03-21

2019年即将进入尾声,你的2020年最想做什么事?

3、找到俩个 多多 可不还要长期发展的行业并现在结速投资。不怎么推荐展开全部8、希望我的第7条可不还要实现。5、希望我中间的1234条都能实现。使用百度知道APP,立即抢鲜

2020-03-21