2017-03-23 41 views
1

我使用JavaFX + Hibernate創建桌面應用程序,但是在用戶使用他/她的用戶名登錄後,我希望用戶名是分配給一個類似於PHP $_SESSION變量的全局變量,該變量可以從任何地方訪問。

這是我的HibernateUtil.java類

package models; 

import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 

public class HibernateUtil { 

    private static final SessionFactory sessionFactory = buildSessionFactory(); 

    public static SessionFactory buildSessionFactory(){ 

    try{ 
     // Create the SessionFactory from hibernate.cfg.xml 
     System.out.println("creating SessionFactory using HibernateUtil.java"); 
     SessionFactory f = new Configuration().configure().buildSessionFactory(); 
     System.out.println("session created successfully"); 
     return f; 
    } catch (Throwable ex){ 
     // Make sure you log the exception, as it might be swallowed 
     System.err.println("Initial SessionFactory creation failed." + ex); 
     throw new ExceptionInInitializerError(ex); 

    } 

    } 

public static SessionFactory getSessionFactory() { 
     return sessionFactory; 
} 

} 

回答

1

Java的相當於「全局變量」的代碼可能是public訪問靜態變量。你可以在你的代碼中創建一個爲

public class Globals { 
    public static String userName; 
} 

以及用戶名可以設置和讀取Globals.userName

注:使用private場和getset方法會更乾淨....

+0

這是不好的做法,並可能不應該在這裏建議J2EE Web應用程序,即使你提供警告。 –

+1

我把這個答案當成是,因爲它是在Java中用PHP中的'$ _SESSION'的替代方法,但是我將使用依賴注入或者使用私有變量創建我自己的方法。 –

1

不要使用「全局數據」。相反,只需將用戶名(和其他數據)傳遞給需要訪問的用戶。 (換句話說,以某種形式使用依賴注入。)

全局數據的一個(很多)問題是,您限制自己只能爲該變量創建一個值。假設在幾個月內你的老闆來到你的辦公室,並說「我們的客戶喜歡你寫的應用程序,但是他們中的很多人有多個他們想同時訪問的賬戶。你能否改編應用程序以便他們能夠打開多個選項卡並登錄到不同選項卡中的每個帳戶?「。 (這種確切的情況可能不適用於你,但總體原則的確如此。)如果你在你的應用程序中使用戶名是一個單一的全局變量,實際上不可能在不重寫任何大部分代碼的情況下進行更改。

參見,例如, http://wiki.c2.com/?GlobalVariablesAreBad,https://softwareengineering.stackexchange.com/questions/148108/why-is-global-state-so-evil,以及許多其他你可以搜索,其他原因不這樣做。

+0

感謝詹姆斯,是的,我瞭解你,但在我的情況下,它是一個桌面應用程序而不是一個Web服務器應用程序,所以「全局變量數據」將存儲在客戶端計算機RAM中,所以全球應該罰款在我的情況下?請諮詢 –

+0

@ OsamaAl-Banna絕對不是。關於全球數據的建議一般適用於軟件設計。我提出的假設場景旨在指向桌面應用程序。不要使用全局數據。 –

+0

如何創建我自己的方法來存儲用戶名和用戶名變量將是私人的?我認爲應用程序仍然可以處理多個用戶權限? –

1

Hibernate Session與您的想法完全不同。

只要你有一個桌面應用程序,你必須關心你需要保留在內存中。如果你想以這種方式命名並保留你需要的東西,你可以創建你自己的Context或「Session」。

模擬了PHP $ _SESSION存在與Servlet API的

相關問題