gpt4 book ai didi

java - 自动加载java静态 block

转载 作者:行者123 更新时间:2023-11-29 03:37:36 25 4
gpt4 key购买 nike

至于 JDBC4,要求 JDBC 驱动程序自动加载。它是通过在驱动程序在 DriverManager 中注册的地方添加一个静态 block 来实现的。但是,当我在我的类中编写这样的 block 时,它仅在我创建此类的对象时执行。否则代码不会运行。

我的问题是:当驱动程序不是从应用程序代码创建时,它们是如何初始化自身的,但是当我使用它来获取数据库连接时,它们是在 DriverManager 中注册的?

最佳答案

JDBC4 规范的第 9.2 段指出,Driver 实现必须在类加载时将自身注册到 DriverManager,以便当Driver 实现被加载,静态初始化器将自动加载注册一个驱动实例。

因此,只需通过 (Class.forName("driverClassName")) 加载 Driver 实现,即可将驱动程序注册到 DriverManager .

或者,该规范提供了一种方法,可以通过系统属性 jdbc.drivers 从外部指定要由 DriverManager 加载(并因此注册)的驱动程序(请参阅第 9.2.1 段):

 java -Djdbc.drivers=com.acme.jdbc.AcmeJdbcDriver Test

这些注册方法在旧的 JDBC3 实现中也可用。

JDBC4 引入了一种新的注册方法,利用服务提供者机制:每个兼容的驱动程序都必须提供一个包含 META-INF/services/java.sql.Driver 文件的 jar。

DriverManager(在 DriverManager.getConnection() 调用上)使用 java.sql.Driver 服务提供者并加载那里指定的类,从而自动注册驱动程序。这消除了调用 Class.forName 的需要(请参阅第 9.2.1 段和第 3.1 段,第一个项目符号)。

关于java - 自动加载java静态 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14685365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com