连续此线程:在Apache 7.0上连接hypersonic(HSQLDB) DB失败
我想知道是否有其他新的方法来使用Class.forName()
函数。
对于JDBC和其他服务(在应用程序服务的意义上,而不是OSGI服务),有ServiceLoader,它将根据类路径加载类,如果类路径上的任何jar文件提供提供"抽象"服务的"实现"。
旧的方式有一个DriverManager,它基本上是一个可能的服务集合。这是您的示例中显示的模式,其中创建类的实例通常会强制运行"静态初始化器"块。该块通常看起来像。
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://...."连接字符串提供连接。
如果你不能依赖于静态初始化块,并且你正在处理JDBC,你可以(假设你可以以某种方式加载类)调用方法在DriverManager中注册一个实例,使用registerDriver(…);但是,您可以很容易地看到所涉及的模式。