[英]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.