SPI機制 - JDBC DriverManager
在JDBC4.0之前,我們開發有連接數據庫的時候,通常會用Class.forName("com.mysql.jdbc.Driver")這句先加載數據庫相關的驅動,然后再進行獲取連接等的操作。而JDBC4.0之后不需要用Class.forName("com.mysql.jdbc.Driver")來加載驅動,直接獲取連接就可以了,現在這種方式就是使用了Java的SPI擴展機制來實現。
JDBC接口定義
首先在java中定義了接口java.sql.Driver,并沒有具體的實現,具體的實現都是由不同廠商來提供的。
mysql實現
在mysql的jar包mysql-connector-java-6.0.6.jar中,可以找到META-INF/services目錄,該目錄下會有一個名字為java.sql.Driver的文件,文件內容是com.mysql.cj.jdbc.Driver,這里面的內容就是針對Java中定義的接口的實現。
postgresql實現
同樣在postgresql的jar包postgresql-42.0.0.jar中,也可以找到同樣的配置文件,文件內容是org.postgresql.Driver,這是postgresql對Java的java.sql.Driver的實現。
使用方法
上面說了,現在使用SPI擴展來加載具體的驅動,我們在Java中寫連接數據庫的代碼的時候,不需要再使用Class.forName("com.mysql.jdbc.Driver")來加載驅動了,而是直接使用如下代碼: