连续这个帖子: Failed to connect hypersonic(HSQLDB) DB on Apache 7.0
我需要知道是否还有其他一些新方法可以使用Class.forName()
功能。
有没有办法从某个罐子加载一个类?
答案 0 :(得分:0)
对于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(.. );但是,你可以很容易地看到所涉及的模式。