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()
启动的。