jdbc.postgresql源碼分析

還沒接觸源碼的時候,對jdbc的執行過程一頭霧水,不知道他是如何執行crud操做的。可是,我在使用的時候發現Class.forNmae(Driver).這個代碼。這時候我猜測它是使用反射機制。查看源碼果真是這樣。Driver類經過靜態代碼塊在Driver類被加載進內存的時候執行register()方法,將驅動進行註冊。它在註冊以前先檢查是否已經註冊,存在的話拋出異常。反之,使用DriverManager類將驅動註冊。java

clipboard.png
clipboard.png

PgConnection使用經過DriverManger.getConnection()方法得到,這其實時調用PGConnection的構造方法進行初始化,而後調用Driver類的connect()方法返回實例。sql

clipboard.png

同理,PgStatement也是在createPgStatemnt方法中對PgStatement實例進行初始化。具體圖片不在展現,它們都調用System.getDefaultProperties()方法獲取鏈接參數,設置具體的執行過程。數據庫

jdbc中採用javaSPI機制,也就是它們給予java.sql包中的接口執行具體實現,所謂spi機制個人理解就是聲明一系列接口,或者說制定好標準,而後由具體類去實現。我猜jdbc的其它數據庫驅動應該也是這種模式。在resource的meta-info下有個service文件夾,裏面創建接口的文件,名字是包名到接口名稱。文件內容是實現類的包名到類名。而後,經過serviceloader類進行加載,加載後的類進行打印獲得每個實現類。學習

源碼具體分析,在接下來的學習中將持續更新。spa

相關文章
相關標籤/搜索