设计模式课程 设计模式精讲 15-2 桥接模式源码解析
发布时间:2020-12-15 07:45:25 所属栏目:Java 来源:网络整理
导读:1 桥接模式源码解析 1.1 源码解析1 jdk中的应用(驱动类) ? ? 1 桥接模式源码解析 1.1 源码解析1 jdk中的应用(驱动类) 步骤: class.forName 调取驱动接口的静态块,触发驱动管理类 DriverManager 的注册驱动方法,从而将该驱动放到 CopyOnWriteArrayList
1 桥接模式源码解析 1.1 源码解析1 jdk中的应用(驱动类) ? ? 1 桥接模式源码解析1.1 源码解析1 jdk中的应用(驱动类)步骤: class.forName 调取驱动接口的静态块,触发驱动管理类DriverManager 的注册驱动方法,从而将该驱动放到CopyOnWriteArrayList中。 getConnect方法是通过传入url用户名密码。 针对不同的数据库,通过driverManager中的不同方法,获取的都是相同的接口,jdbc在最初的时候设计了一套接口,再由各个数据库公司实现这套接口。 ? 重点: 实现(各种Driver如SqlDriver,OracleDriver等)和抽象(DriverManager的分离)分离 ? 驱动接口: // // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package com.mysql.jdbc; import java.sql.DriverManager; import java.sql.SQLException; public class Driver extends NonRegisteringDriver implements java.sql.Driver { public Driver() throws SQLException { } //class.forName 直接调用该静态块 static { try { DriverManager.registerDriver(new Driver()); } catch (SQLException var1) { throw new RuntimeException("Can‘t register driver!"); } } } ? 驱动实现类: public class Driver extends NonRegisteringDriver implements java.sql.Driver { public Driver() throws SQLException { } } ? DriverManager: public class DriverManager { // List of registered JDBC drivers private final static CopyOnWriteArrayList<DriverInfo> registeredDrivers = new CopyOnWriteArrayList<DriverInfo>(); private static volatile int loginTimeout = 0; private static volatile java.io.PrintWriter logWriter = null; private static volatile java.io.PrintStream logStream = null; // Used in println() to synchronize logWriter private final static Object logSync = new Object(); /* Prevent the DriverManager class from being instantiated. */ private DriverManager(){} /** *内部类,对driver进行封装 */ class DriverInfo { final Driver driver; DriverInfo(Driver driver) { this.driver = driver; } public boolean equals(Object other) { return (other instanceof DriverInfo) && this.driver == ((DriverInfo) other).driver; } public int hashCode() { return driver.hashCode(); } public String toString() { return ("driver[className=" + driver + "]"); } } public static synchronized void registerDriver(java.sql.Driver driver)
//获取数据库连接
@CallerSensitive (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |