簡體   English   中英

Class.forName()-還有其他使用方式嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM