Class.forName() -是否有其他方法使用它



连续此线程:在Apache 7.0上连接hypersonic(HSQLDB) DB失败

我想知道是否有其他新的方法来使用Class.forName()函数。

是否有从某个jar加载类的方法?

对于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(…);但是,您可以很容易地看到所涉及的模式。

相关内容

  • 没有找到相关文章

最新更新