繁体   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