2009-10-16 16 views
-1

如何創建用於多種用途的單例類 以及如何使用該單例類連接到jsp如何從JSP創建和引用單例對象?

+1

單身人士是一個單一的類,但你使用複數類。你需要詳細說明你真正的意思和需要達到什麼,以及爲什麼你認爲你需要一個單身人士。 – 2009-10-16 08:59:09

回答

3

我不確定爲什麼你想直接連接到來自JSP的單例。如果您要訪問的效用函數我會用JSTL功能去:

<function> 
    <name>decodeBase64</name> 
    <function-class>nl.wikiwijs.web.portal.Base64Util</function-class> 
    <function-signature>java.lang.String stringDecodeBase64(java.lang.String)</function-signature> 
</function> 

在哪裏「功能簽名」指向一個靜態方法在「功能類」課程。上述應在TLD,然後我可以像這樣使用:

${mynamespace:decodeBase64("my value")} 

如果單將被用於檢索數據或公開業務邏輯我想它搬回到控制器/動作/組件取決於您的架構。

1

如果您打算在Java EE應用程序中使用Singleton模式,請參閱this article。它將提供一些重要的見解以及進一步研究的鏈接。

正如p3t0r所述,直接從JSP內使用服務在架構上並不健全。嘗試使用某種MVC框架(例如Spring Web MVC,它們與Spring DI容器一起使用,也可以免除使用您自己的單例實現)分離關注點。

0

基本singleton設計模式有幾個特點:

  • 沒有構造:確保默認的構造函數是私有
  • 創建調用私有構造(或多個)靜態函數,如果對象是不已經實例化了
  • 有一個靜態實例變量,它是它自己的類的類型。一個簡單的單類實現的

一個例子是:用於連接到在jsp

public class SingletonClass { 
    private static SingletonInstance si; 

    private SingletonClass() { 

    } 

    public static synchronized SingletonClass getSingletonInstace() { 
     if (si == null) 
      return new SingletonClass(); 
     return si; 
    } 
} 
+1

此實現不正確:它不是線程安全的。 – p3t0r 2009-10-16 10:18:52

1

,你會用p3t0r的答案。

爲單身,你會用一個懶惰的私有靜態類單身其中guarentees線程安全*:

public class SingletonClass { 
    private static class LazySingletonInitializer { 
     static SingletonClass instance = new SingletonClass(); 
    } 

    private SingletonClass(){} 

    public SingletonClass getInstance() { 
     return LazySingletonInitializer.instance; 
    } 
} 

(*),因爲一類的靜態成員由JVM保證的廣告將僅由一個線程初始化。