zoukankan      html  css  js  c++  java
  • java spi机制和场景

     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

  • 相关阅读:
    js:鼠标事件
    js:argument
    js:|| 和 && 运算符 特殊用法
    css:选择器
    css:清除浮动 overflow
    jquery:after append appendTo三个函数的区别
    WIndow Document
    css:颜色名和十六进制数值
    安装centos出错
    Leetcode | Unique Paths I & II
  • 原文地址:https://www.cnblogs.com/yszzu/p/9599051.html
Copyright © 2011-2022 走看看