簡體   English   中英

在Hibernate或Java中是否有類似於PHP $ _SESSION的Session變量

[英]is there a Session variable in Hibernate or Java similar to PHP $_SESSION

我正在使用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;
 }

}

Java等同於“全局變量”可以是public可訪問的靜態變量。 您可以在代碼中創建一個

 public class Globals {
     public static String userName;
 }

並且可以從Globals.userName設置和讀取用戶名。

注意:使用private字段和getset方法會更干凈....

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

全局數據中的一個(很多)問題是您將自己限制為只有該變量的一個值。 假設在幾個月內你的老板來到你的辦公室並說“我們的客戶喜歡你寫的應用程序,但他們中的許多人都有他們想要同時訪問的多個帳戶。你可以調整應用程序,以便他們可以打開多個標簽並在不同的標簽中登錄每個帳戶?“ (這種情況可能不適用於您,但一般原則可能適用。)如果您在應用程序中將用戶名設置為單個全局變量,則在不重寫任意大部分代碼的情況下進行此更改幾乎是不可能的。

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

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

只要您擁有桌面應用程序,就必須關注內存中需要保留的內容。 你可以創建自己的上下文或“會話”,如果你喜歡這樣命名並保持你需要的。

Analog for PHP $ _SESSION存在於使用Servlet API的J2EE Web應用程序中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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