继续这个线程: Failed to connect hypersonic(HSQLDB) DB on Apache 7.0
我需要知道是否还有其他一些新方法可以使用 Class.forName()
函数。
有没有办法从某个 jar 加载类?
最佳答案
对于 JDBC 和其他服务(在应用程序服务的意义上,而不是 OSGI 服务),有 ServiceLoader它将根据类路径加载类,并且类路径上的任何 jar 文件是否提供“抽象”服务的“实现”。
较旧的方法有一个 DriverManager,它基本上是可能的服务的集合。这是示例中显示的模式,其中创建类的实例通常会强制“静态初始化程序” block 运行。该 block 通常看起来像这样。
public class MyService implements Service {
static {
ServiceRegistry.register(new MyService());
}
}
或者特别是对于 JDBC
public class MyDriver implements Driver{
static {
DriverManager.registerDriver(new MyDriver());
}
}
在 JDBC 中,驱动程序管理器会遍历已注册服务的列表,询问每个服务是否为“jdbc:hsqldb:hsql://....”连接字符串提供连接。
如果您不能依赖静态初始化 block ,并且您正在特别处理 JDBC,则可以(假设您可以以某种方式加载该类)调用方法以在 DriverManager 中注册实例,方法是使用 registerDriver(...);但是,您可以轻松地看到所涉及的模式。
关于java - Class.forName() - 还有其他方法使用它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32106052/