关于在java中模拟全局变量的查询

关于在java中模拟全局变量的查询,java,global,Java,Global,我有一个问题,我想这对这里的大多数人来说都是微不足道的。然而,情况是这样的- 我有一个连接到数据库以读取特定信息的应用程序。现在,这种读取是在应用程序中基于每个请求的多个类之间进行的。因此,我想将每个请求到数据库的连接数限制为1个。这就是我所做的 假设我有一个数据库访问类DBAccess,它获取两个字符串a和b 我写了一个全局类,如下所示- public class Global { static String a; static String b;

我有一个问题,我想这对这里的大多数人来说都是微不足道的。然而,情况是这样的- 我有一个连接到数据库以读取特定信息的应用程序。现在,这种读取是在应用程序中基于每个请求的多个类之间进行的。因此,我想将每个请求到数据库的连接数限制为1个。这就是我所做的

假设我有一个数据库访问类DBAccess,它获取两个字符串a和b

我写了一个全局类,如下所示-

    public class Global {
        static String a;
        static String b;

        public Global(DBAccessInput input) throws Exception {
            super();
            DBAccess dbtool= new DBAccess(input);
            a=dbtool.getA();
            b=dbtool.getB();
        }
}
因此,现在我可以在应用程序的其他类中以Global.a和Global.b的身份访问a&b。但这对我来说似乎是错误的,因为要填充a&b,我需要实例化一个全局对象,然后我会返回到以全局的方式访问a&b。我可以将全局构造函数中的所有内容放入一个静态块中,但这仍然没有帮助,因为我仍然需要实例化一个全局对象,以便将“输入”传递给DBAccess


任何方向正确的帮助或指针都会有很大帮助。

您可以在全局的静态方法中实例化这些静态变量,而不是构造函数 但这不是一种好的风格:

static initialize(DBAccessInput input) {
     a = ...
     b = ...
}

您不必实例化Global来访问其静态成员。静态成员是通过类名访问的,完全没有对象。所以你的方法是合理的

处理全局对象有以下常见做法

静态成员几乎是您的方法 单例模式 线程本地。 如果我是你,我会将DBAccess设置为singleton,这样你就可以访问数据库anyare:DBAccess.getInstance.find查询


顺便说一句,看看已经实现了DB访问层的工具。例如iBatis、Hibernate、JPA。

但这需要我实例化一个对象定义一个全局构造函数,以使传递的“输入”能够“初始化”。不,不会。您可以通过类名:Global.initialize…调用静态方法,因为它为我提供了一个短期修复,而无需进行重大更改。长期而言,我建议使用依赖注入框架,如picocontainer、guice或swingThanks,当我查看你的更新时,我正在阅读单例模式:这将是一个长期的方法。全局被普遍认为是一件非常糟糕的事情。用Java模拟它们是一个糟糕得多的想法。