博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java spi机制和场景
阅读量:4486 次
发布时间:2019-06-08

本文共 1273 字,大约阅读时间需要 4 分钟。

 JDK中查找服务的实现的工具类是:java.util.ServiceLoader, jvm启动时自动查找META-INF/services/下面的实现类,并初始化实例

 

jdbc的mysql实现类 在静态代码块中完成自动注册到DriverManager

 

代码中可以直接使用DriverManager.getConnection来获取连接。

DriverManager的静态代码块会自动调用ServiceLoader.load(Driver.class) , 来加载mysql的驱动。但是这个加载也是从DriverManager.getConnection使用的时候才触发加载

如果手动实现spi,还是要在某个地方调用ServiceLoader.load(xxx.class)

 

代码不需要手动指定Driver所在的package,不用手动调用Class.forName("xxxx.xxx.xxx.XxDriver") 因为上面SPI已经帮我们执行了static代码

一个最简单的jdbc示例

1     public static void main(String[] args) { 2         try (Connection connection = DriverManager.getConnection("jdbc:mysql://xxx:3306/xxdb?useSSL=true", "root", "1111")){ 3             Statement statement = connection.createStatement(); 4             ResultSet res = statement.executeQuery("select now() from dual"); 5             while(res.next()){ 6                 Timestamp timestamp = res.getTimestamp(1); 7                 System.out.println(timestamp); 8             } 9         } catch (SQLException e) {10             e.printStackTrace();11         }12     }

 

 

@see 

https://cxis.me/2017/04/17/Java%E4%B8%ADSPI%E6%9C%BA%E5%88%B6%E6%B7%B1%E5%85%A5%E5%8F%8A%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/

dubbo

spring.datasource.driver-class-name 不需要配置,但是它会根据url匹配出相应的driver,没有使用SPI

 

转载于:https://www.cnblogs.com/yszzu/p/9599051.html

你可能感兴趣的文章
servlet乱码问题
查看>>
反射+特性实现 类和XML文档的序列化反序列化
查看>>
日常方法
查看>>
解决Ueditor在bootstarp 模态框中全屏问题
查看>>
POJ 1006 Biorhythms
查看>>
dubbo+zookeeper注册服务报错问题:No service registed on zookeeper
查看>>
极验滑动验证登录
查看>>
求多个数的质因子
查看>>
laravel的orm作用
查看>>
文件锁
查看>>
props和state
查看>>
LeetCode:Unique Paths I II
查看>>
AcWing 兔子与兔子
查看>>
洛谷 P3871 [TJOI2010]中位数
查看>>
洛谷 P2073 送花
查看>>
洛谷 P1801 黑匣子_NOI导刊2010提高(06)
查看>>
洛谷 P1503 鬼子进村
查看>>
E. The shortest problem
查看>>
进制转换——9018——1065
查看>>
老男孩Python全栈开发(92天全)视频教程 自学笔记21
查看>>