在 Struts 應用中,HibernatePlugin 嘗試實例化 HibernateSessionFactory 時拋出錯誤:
HibernateSessionFactory() has private access in zy.pro.td.util.HibernateSessionFactory at line 35
原因在於 HibernateSessionFactory 的建構子被宣告為 private,外部類無法直接 new 實例。
public class HibernatePlugin implements PlugIn {
private HibernateSessionFactory hsf;
public HibernatePlugin() {
hsf = new HibernateSessionFactory(); // 編譯/運行時報錯
}
// ... 其他方法
}
將 HibernateSessionFactory 的建構子改為 public 即可通過編譯並正常運行。但這也暴露了單例模式的實現細節——私有建構子通常配合靜態工廠方法使用,直接實例化違背了設計初衷。
getInstance() 靜態方法,而非開放建構子。HibernateSessionFactory.getInstance() 獲取實例。本文來自編程入門網:原文連結