[英]Class.forName() - are there other ways to use it?
不斷出現此線程: 無法在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,則可以(假設可以以某種方式加載類)調用方法,使用registerDriver(...)在DriverManager中注冊實例。 但是,您可以輕松查看所涉及的模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.