[英]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
字段和get
和set
方法會更干凈....
不要使用“全局數據”。 相反,只需安排將用戶名(和其他數據)傳遞給需要訪問它的人。 (換句話說,以某種形式使用依賴注入。)
全局數據中的一個(很多)問題是您將自己限制為只有該變量的一個值。 假設在幾個月內你的老板來到你的辦公室並說“我們的客戶喜歡你寫的應用程序,但他們中的許多人都有他們想要同時訪問的多個帳戶。你可以調整應用程序,以便他們可以打開多個標簽並在不同的標簽中登錄每個帳戶?“ (這種情況可能不適用於您,但一般原則可能適用。)如果您在應用程序中將用戶名設置為單個全局變量,則在不重寫任意大部分代碼的情況下進行此更改幾乎是不可能的。
見,例如http://wiki.c2.com/?GlobalVariablesAreBad , https://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.