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进行注册: