Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DriverManager如何获取jdbc驱动程序类的实例_Java_Design Patterns_Jdbc - Fatal编程技术网

Java DriverManager如何获取jdbc驱动程序类的实例

Java DriverManager如何获取jdbc驱动程序类的实例,java,design-patterns,jdbc,Java,Design Patterns,Jdbc,Class.forName用于实例化驱动程序类。 Class.forName没有对象,它只是实例化驱动程序类实例。如果是这样,DriverManager类将如何获取实例化驱动程序类的引用?来自 调用getConnection方法时,DriverManager将 尝试从以下位置装载的驾驶员中找到合适的驾驶员: 初始化和那些使用相同的类加载器显式加载的 作为当前小程序或应用程序 初始化时加载的驱动程序::DriverManager类将尝试加载“jdbc.drivers”系统属性中引用的驱动程序类 显

Class.forName
用于实例化驱动程序类。
Class.forName
没有对象,它只是实例化驱动程序类实例。如果是这样,DriverManager类将如何获取实例化驱动程序类的引用?

来自

调用getConnection方法时,DriverManager将 尝试从以下位置装载的驾驶员中找到合适的驾驶员: 初始化和那些使用相同的类加载器显式加载的 作为当前小程序或应用程序

初始化时加载的驱动程序::DriverManager类将尝试加载“jdbc.drivers”系统属性中引用的驱动程序类

显式加载的驱动程序::by Class.forName(“driver.name”)

有关
驱动程序
界面,请参见

上面说,

加载驱动程序类时,它应该创建自身的实例 并向DriverManager注册。这意味着用户可以 通过调用加载并注册驱动程序

类forName(“foo.bah.Driver”)

forName(“X”)导致名为X的类被动态加载, 基本上,对forName(“X”)的调用会导致名为X的类被初始化(即,JVM在类加载后执行其所有静态块)

为了回答您的问题,JVM执行静态块,驱动程序向DriverManager注册自身

这个过程在以下链接中有很好的解释:

但是请注意,JDBC 4.0驱动程序不再需要这样做,因为它们应该通过META-INF/services进行注册: