对于线程上下文类加载器在之前已经对它进行了详细的理论化的学习,其中对于这个类加载器应用最多的也就是在SPI场合下用来打破双亲委托机制,如之前所描述的:

这次举一个具体的例子来进一步的加深对线程上下文类加载器的理解,这里以mysql为例,当然首先得要将mysql的依赖jar给导进来喽,如下:

好~~万事具备,以欠东风,接下来咱们来应用一下,这里会用到一个平时我们不太使用的一个很重要的类:ServiceLoader,如果不是研究线程上下文类加载器确实是不太会接触它,这也是本次学习的重点,先来看一下它的使用:

这个是干嘛的,一头雾水,不要着急,先只要有一个感性的认识,稍后就会详细的去读它的javadoc对它进行一个全方位的了解,下面继续编写完:

直接先看运行结果:

其中对应的驱动可以在mysql中的依赖jar中找到,如下:

对于这一脸懵逼的代码思考一个问题,为啥就可以找到这两个驱动呢?目前只是通过ServiceLoader类写了这么一句代码:

而且这个Driver是一个接口,如下:

也没有一个具体的类,要想解开这个疑问,就得去读ServiceLoader的javadoc了,打开会发现此类的javadoc注释也太恐怖了,看着就头晕,不过由于它是类加载的一个非常非常重要的类,所以硬着头皮也得去读,下面开始:

读到这,对于ServiceLoader就有了一个整体的认识,对于咱们Mysql这个例子而言其实就是用来加载Mysql驱动的基础设施,好继续:

接下来这段javadoc就能解答我们的问题啦,如下:

先暂停一下,先来具体来看一下是否有META-INF/services这个目录:

展开看一下它里面有啥:

因为我们要加载的驱的全名就是它,如下:

然后打开看一下该文件的内容:

这也就是为啥能找到它们的原因啦~可见读javadoc的作用还是蛮大的,好继续往下读:

其实说的缓存是定义在ServiceLoader当中,看一眼:

这跟我们看到的mysql中的一样,这就是定的规则。

至此!!ServiceLoader的javadoc基本上都通读了一遍~

ServiceLoader在SPI中的重要作用分析的更多相关文章

  1. hello1 web项目中web.xml作用分析

    该web.xml文件包含Facelets应用程序所需的几个元素.使用NetBeans IDE创建应用程序时,将自动创建以下所有内容. 指定项目阶段的上下文参数: <context-param&g ...

  2. Dubbo学习笔记6:Dubbo增强SPI与SPI中扩展点自动包装的实现原理

    在Dubbo整体架构分析中介绍了Dubbo中除了Service和Config层为API外,其他各层均为SPI,为SPI意味着下面各层都是组件化可以被替换的,也就是扩展性比较强,这也是Dubbo比较好的 ...

  3. SPI协议及工作原理分析

    说明.文章摘自:SPI协议及其工作原理分析 http://blog.csdn.net/skyflying2012/article/details/11710801 一.概述. SPI, Serial ...

  4. u-boot中nandflash初始化流程分析(转)

    u-boot中nandflash初始化流程分析(转) 原文地址http://zhuairlunjj.blog.163.com/blog/static/80050945201092011249136/ ...

  5. linux系统 initrd.img中init启动脚本分析

    概述:这篇文章主体内容来源于网上转载.前面几篇文章倾向于制作initrd.img,这篇文章更倾向于initrd.img的运行过程:加载framebuff驱动 ide驱动和文件系统驱动,最后进入到真正的 ...

  6. C#学习笔记(17)——C#中接口的作用

    说明(2017-7-17 23:50:48): 原文: 接口的作用 接口的作用(C#)(另一篇) C#接口是一个让很多初学C#者容易迷糊的东西,用起来好像很简单,定义接口,里面包含方法,但没有方法具体 ...

  7. C++中几个值得分析的小问题(2)

    下面有3个小问题,作为C++ Beginner你一定要知道错在哪里了. 1.派生类到基类的引用或指针转换一定“完美”存在? 一般情况,你很可能会认为:派生类对象的引用或指针转换为基类对象的引用或指针是 ...

  8. 事务配置在applicationContext.xml文件中不起作用,控制不了异常回滚

    一.博主在学习到整合ssm框架的时候,遇到一个奇葩的问题就是将 事务的控制 ,写在在applicationContext.xml文件中不起作用,在事务控制的方法中,即使出现了异常,但是事务不会回滚的坑 ...

  9. WANNACRY病毒中的加密技术分析

    WANNACRY病毒中的加密技术分析 2019/11/6 16:56:46 分析WANNACRY病毒中的加解密技术的应用.分析内容包括但不限于:对称密码技术和公钥密码技术的作用:受害者支付赎金后就会恢 ...

随机推荐

  1. JavaScript中new运算符的实现

    废话不多说直接进入正题,首先我们需要先知道new运算符到底做了哪些事情,再来模拟它实现这一功能. 1. 建立一个空的Object对象: 2. 把这个空对象用__proto__链接到原型 3. 用app ...

  2. 深度优先dfs与广度bfs优先搜索总结+例题

    DFS(Deep First Search)深度优先搜索 深度优先遍历(dfs)是对一个连通图进行遍历的算法.它的思想是从一个顶点开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节 ...

  3. 攻防世界WEB新手练习

    0x01 view_source 0x02 get_post 这道题就是最基础的get和post请求的发送 flag:cyberpeace{b1e763710ff23f2acf16c2358d3132 ...

  4. 【ARM-Linux开发】 pkg-config的用法

    pkg-config 是一个提供从源代码中编译软件时查询已安装的库时使用的统一接口的计算机软件.pkg-config原本是设计用于Linux的,但现在在各个版本的BSD.windows.Mac OS ...

  5. Odoo13 新变化:存货核算

    Odoo13将于2019年10月发布,本次发布也包含了大量的改进,例如,对存货核算的重构. 去掉了 产品历史价格product.price.history ,增加了 stock valuation l ...

  6. noi openjudge7627:鸡蛋的硬度

    http://noi.openjudge.cn/ch0206/7627/ 描述 最近XX公司举办了一个奇怪的比赛:鸡蛋硬度之王争霸赛.参赛者是来自世界各地的母鸡,比赛的内容是看谁下的蛋最硬,更奇怪的是 ...

  7. Docker 安装 Apache

    查找Docker Hub上的httpd镜像 apache$ docker search httpd 拉取官方的镜像 docker pull httpd 使用apache镜像 创建目录apache,用于 ...

  8. [转帖]从入门到实践:创作一个自己的 Helm Chart

    从入门到实践:创作一个自己的 Helm Chart https://www.cnblogs.com/alisystemsoftware/p/11436469.html 自己已经搭建好了 helm 和t ...

  9. [转帖]postgresql查看用户连接以及杀死连接的会话

    postgresql查看用户连接以及杀死连接的会话 2017年10月11日 15:21:18 DB_su 阅读数 8908更多 分类专栏: postgresql   版权声明:本文为博主原创文章,遵循 ...

  10. 服务器TIME_WAIT和CLOSE_WAIT区别及解决方案

    系统上线之后,通过如下语句查看服务器时,发现有不少TIME_WAIT和CLOSE_WAIT. netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) ...