JDBC中的DriverManager概念是否基于提供者设计模式

在JDBC中我们使用

的Class.forName( “com.microsoft.sqlserver.jdbc.SQLServerDriver”)的newInstance();

在内存中加载对象的方法。 然后,当我们使用DriverManager类来获取与Sql Server的连接时,DriverManager会自动使用内存中加载的驱动程序集中的相应驱动程序。 可以将DriverManager概念与.net中使用的Provider设计模式进行比较吗? 如果没有,那么我们究竟是什么意思

的Class.forName( “com.microsoft.sqlserver.jdbc.SQLServerDriver”)

方法和为什么我们不使用new关键字创建sql server驱动程序类的对象?

Class.forName("XXXDriver")调用XXXDriver的静态块 。 通常,静态块调用DriverManager.registerDriver(new XXXDriver())将自己注册到DriverManager

就像是:

 public class XXXDriver implements Driver{ static{ //Be invoked by Class.forName("XXXDriver") DriverManager.registerDriver(new XXXDriver()) } ... } 

不幸的是,我不知道.Net中的提供者模式。 但这是Class.forName()魔法的用途。

您不通过newInstance()实例化该类。 forName()就足够了。 (好的,我在BalusC的答案中看到了实例创建的原因。)

JDBC规范要求每个JDBC驱动程序使用DriverManager.registerDriver()注册自己。 这是通过在加载类时执行的静态块来完成的。 类加载是通过Class.forName()启动的。